0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【PHYTEC开发板试用体验】phyBOARD-Pollux i.MX 8M Plus 主机开发程序并尝试开发板调试2

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-12-05 10:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:王志奇, 帖子地址:https://bbs.elecfans.com/jishu_2305273_1_1.html

之前测试搭建好了软硬件开发环境后,我开始了项目开发尝试,首先是调试了虚拟机Ubuntu的摄像头获取,然后利用QT程序调用摄像头拍照,并尝试在开发板上直接调试摄像头调用程序,

第二个小目标是在主机上安装OpenCV,并利用OpenCV调用摄像头,然后是通过QT程序通过OpenCV实现调用摄像头,并且通过QT直接在开发板上调式这个OpenCV调用摄像头的应用

第三个大目标是将程序移植到开发板并在开发板上测试,这一步由于我之前没有完全解决opt下root目录空间的问题,未能完全实现,

并且在调试中发现,我的主机和开发板用了不同的摄像头出现了我还未能解决的问题。目前还在尝试中。

本次项目测试在开发板上没有完全实现,主要是调试的root空间百分百被使用,把程序直接复制到开发板后由于摄像头问题未能实现,

但是,整个开发过程以及遇到的问题还是能起到一些避坑帮助的。

接下来,我将测试开发过程简单介绍,并把一些问题记录出来,

我在上一篇中,测试好了主机的开发环境,因为开发板提供的系统已经完成了一些配置,只需要稍微测试程序调试即可,但是一定要注意在开发调试的时候,注意使用开发板root空间,不要将大的程序文件拷贝过去,会导致开发板端调试报错的。

vmbox使用摄像头的时候,需要在设置里面USB添加一个摄像头筛选器,笔记本开发时候建议使用外接USB摄像头,不建议使用笔记本自带摄像头开发测试,这会导致在开发板上测试使用摄像头可能无法成功的问题。
2022-09-12_090918.png

另外,vmbox虚拟机需要安装vbox官网的对应版本的usb扩展插件,这个很重要,下载好插件后需要在vbox启动后的上方菜单设备设置中添加设备控制增强插件,并且,在选择USB控制器的时候要选择2.0 和3.0
2022-09-12_153218.png

两个选项轮流尝试,并添加USB摄像头,有的usb摄像头虽然是2。0但USB选择器需要选3.0才能被vbox虚拟机中的Ubuntu系统识别。2022-09-12_155802.png
2022-09-12_154833.png

QT程序控制摄像头开发程序在网上都有,比较简单,创建新项目的时候注意选择正确项目属性如图,一般Ubuntu系统设别了摄像头,

2022-09-12_171856.png
QT代码问题不大,在主机桌面测试后,可以选择在ARM开发板上测试QT启用摄像头,你需要吧虚拟机识别的USB摄像头插到开发板上进行测试,如果你使用的是笔记本自带的摄像头,这个时候多多少少会有些问题,另外,最好先关虚拟机再插拔摄像头,我的系统奔溃了好几次,耽误了很多时间用于恢复虚拟机系统,很不稳定。

test.pro

QT += core gui

QT += multimedia

QT += multimediawidgets

greaterThan(QT_MAJOR_VERSION,
4): QT += widgets

TARGET
= QCameratest

TEMPLATE
= app

SOURCES
+= main.cpp

widget.cpp

HEADERS += widget.h

FORMS += widget.ui

.h

#ifndef
WIDGET_H

#define
WIDGET_H

#include

class
QCamera;

class
QCameraViewfinder;

class
QCameraImageCapture;

class
Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = 0);



~Widget();

private
slots:

void exitBtnResponded();



void cameraImageCaptured(int,QImage);

private:

QCamera*             m_pCamera;       //读取摄像头



QCameraViewfinder*   m_pViewfinder;   //渲染摄像头



QCameraImageCapture* m_pImageCapture; //获取摄像头当前帧

};

#endif
// WIDGET_H

main.cpp

#include
"widget.h"

#include

int
main(int argc, char *argv[])

{

QApplication a(argc, argv);



Widget w;



w.show();







return a.exec();

}

Widget.cpp

#include
"widget.h"

#include

#include

#include

#include

#include

#include

#include

Widget::Widget(QWidget
*parent)

: QWidget(parent)

{

setWindowTitle("QCamera");



m_pCamera = new QCamera(this);



m_pViewfinder = new

QCameraViewfinder(this);

m_pImageCapture = new

QCameraImageCapture(m_pCamera);

QPushButton* button1 = new

QPushButton("Capture");

QPushButton* button2 = new

QPushButton("Exit");

QVBoxLayout *mainLayout = new

QVBoxLayout(this);

mainLayout->addWidget(m_pViewfinder);



mainLayout->addWidget(button1);



mainLayout->addWidget(button2);



connect(button1, SIGNAL(clicked()),

m_pImageCapture, SLOT(capture()));

connect(button2, SIGNAL(clicked()), this,

SLOT(exitBtnResponded()));

connect(m_pImageCapture,

SIGNAL(imageCaptured(int,QImage)), this,
SLOT(cameraImageCaptured(int,QImage)));

m_pImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);

m_pCamera->setCaptureMode(QCamera::CaptureStillImage);

m_pCamera->setViewfinder(m_pViewfinder);



m_pCamera->start();

}

Widget::~Widget()

{

delete

m_pCamera;

delete

m_pViewfinder;

delete m_pImageCapture;

}

void
Widget::exitBtnResponded()

{

m_pCamera->stop();



close();

}

void
Widget::cameraImageCaptured(int, QImage image)

{

QString savepath =

QFileDialog::getSaveFileName(this,"Save
Capture","Capture","Image png(.png);;Image
jpg(
.jpg);;Image bmp(*.bmp)");

if(!savepath.isEmpty()){



    image.save(savepath);



}

第二部分是安装OpenCV在Ubuntu上,并使用opencv调用摄像头,

OpenCV安装过程会不断更新对应的库, 以及更新cmake
相关,需要你给虚拟机再添加一个桥接到无线网卡的虚拟机网卡,如果,你使用的是网线与开发板调试的话。这样就不需要来回切换了。

CSDN
上 有个叫不高兴的
Ubuntu下QT 调用OpenCV使用摄像头帖子中对于OpenCV安装非常详细,可以参考,之后的具体开发就参考思路即可。

其中,OpenCV安装过程中要不断注意报错提示,安装网络上的步骤基本问题不大,少什么就装什么,网络畅通的话也就个把小时。
2022-09-13_092150.png

2022-09-13_092248.png

2022-09-13_092416.png

2022-09-13_094036.png

OpenCV安装之后,有一件重要的事情就是升级QT,直接安装QT5并设置环境变量,官方的Ubuntu 虚拟机中是QT4 ,这个开发的时候需要QT5,我使用的是OpenCV3, 已经很古老了,但都需要QT5支持。

QT调用OpenCV开启摄像头的代码放在文章最后,
2022-09-13_105019.png

我在实现qt调用OpenCV设别人脸的时候,Ubuntu崩溃了,开发板之前的root空间也又成了百分百占用了,我之前已经重新扩展的etx4根空间了,但我发现我需要重新挂载一个新建的root空间,
2022-09-13_105606.png

另外就是,虚拟机以及硬盘所在
空间一定要留够25G以上的空间,因为在安装opencv相关时候,虚拟内存和虚拟空间增长速度很快,盘满了虚拟机Ubuntu系统容易崩溃导致重装环境,删除虚拟机重新连接虚拟硬盘无法继续开发和测试,

目前,我正在解决重装环境,等解决完,下一期我将着重在开发板上测试项目程序,实现最终项目。

这是找到一个比较好用的OpenCV编辑照片和调用摄像头的代码

optest.cpp

#include

#include

using
namespace cv;

using
namespace std;

int
main(int argc, char** argv)

{

CvPoint center;

double scale = -3;

IplImage* image =
cvLoadImage("lena.jpg");

argc == 2? cvLoadImage(argv[1]) : 0;

cvShowImage("Image", image);

if (!image) return -1; center = cvPoint(image->width / 2,
image->height / 2);

for (int i = 0;iheight;i++)

for (int j = 0;jwidth;j++) {



    double dx = (double)(j - center.x) /

center.x;

double dy = (double)(i - center.y) /

center.y;

double weight = exp((dx*dx +

dy*dy)*scale);

uchar* ptr = &CV_IMAGE_ELEM(image,

uchar, i, j * 3);

ptr[0] = cvRound(ptr[0] * weight);



    ptr[1] = cvRound(ptr[1] * weight);



    ptr[2] = cvRound(ptr[2] * weight);



  }

Mat src;Mat dst;

src = cvarrToMat(image);

cv::imwrite("test.png", src);

cvNamedWindow("test",1);  imshow("test",

src);

cvWaitKey();



return

0;

}

g++ test.cpp -o testpkg-config --cflags--libs opencv

摄像头使用代码

#include

#include

#include

#include

using
namespace cv;

using
namespace std;

int
main()

{

//打开电脑摄像头

VideoCapture cap(0);

if (!cap.isOpened())

{

cout << "error" <<

endl;

waitKey(0);



  return 0;

}

//获得cap的分辨率

int w =
static_cast(cap.get(CV_CAP_PROP_FRAME_WIDTH));

int h =
static_cast(cap.get(CV_CAP_PROP_FRAME_HEIGHT));

Size videoSize(w, h);

VideoWriter
writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25,
videoSize);

Mat frame;

int key;//记录键盘按键

char startOrStop = 1;//0 开始录制视频; 1 结束录制视频

char flag = 0;//正在录制标志 0-不在录制; 1-正在录制

while (1)

{

cap >> frame;



  key = waitKey(100);



  if (key == 32)//按下空格开始录制、暂停录制   可以来回切换



  {



    startOrStop = 1 - startOrStop;



    if (startOrStop == 0)



    {



       flag = 1;



    }



  }



  if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘



  {



    break;



  }







  if (startOrStop == 0 && flag==1)



  {



    writer << frame;



    cout << "recording"

<< endl;

}



  else if (startOrStop == 1)



  {



    flag = 0;



    cout << "end recording"

<< endl;

}



  imshow("picture", frame);

}

cap.release();

writer.release();

destroyAllWindows();

return 0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PHYTEC
    +关注

    关注

    0

    文章

    19

    浏览量

    3933
  • 开发板试用
    +关注

    关注

    3

    文章

    303

    浏览量

    2643
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    既要稳定性,还要性价比的工业级开发板 — 米尔i.MX91

    之前我介绍过NXPi.MX8系列的开发板,最近它的下一代产品i.MX9系列产品也有了,我就拿到了这个基于NXPi.MX9系列的米尔MYD-LMX91
    的头像 发表于 11-20 08:05 753次阅读
    既要稳定性,还要性价比的工业级<b class='flag-5'>开发板</b> — 米尔<b class='flag-5'>i.MX</b>91

    恩智浦FRDM i.MX 8M Plus开发板详解

    开发高级HMI应用、计算机视觉系统以及边缘AI项目时,开发人员常常面临一个共同挑战:如何在不依赖昂贵且复杂的开发平台的前提下,获得足够的处理能力。这正是FRDM i.MX
    的头像 发表于 11-18 15:07 662次阅读

    简单认识NXP FRDM i.MX 93开发板

    FRDM i.MX 93开发板是一款入门级、紧凑型开发板,采用i.MX93应用处理器。该配备板载IW612模块,集成了恩智浦的三频解决方案
    的头像 发表于 11-17 09:45 567次阅读
    简单认识NXP FRDM <b class='flag-5'>i.MX</b> 93<b class='flag-5'>开发板</b>

    恩智浦FRDM i.MX 8M Plus开发板上架

    i.MX 8M Plus应用处理器集成2个或4个Arm Cortex-A53核、1个专用于实时控制的Arm Cortex-M7核,以及1个算
    的头像 发表于 08-16 17:38 1818次阅读
    恩智浦FRDM <b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b><b class='flag-5'>开发板</b>上架

    有奖丨米尔 NXP i.MX91开发板免费试用来啦

    米尔与NXP合作发布的新品基于NXPi.MX91应用处理器的MYD-LMX91开发板免费试用名额来啦~~米尔提供了3套价值588元的MYD-LMX91开发板发起
    的头像 发表于 06-05 08:02 1115次阅读
    有奖丨米尔 NXP <b class='flag-5'>i.MX</b>91<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>来啦

    米尔NXP i.MX 91核心发布,助力新一代入门级Linux应用开发

    、1路RS232 凤凰端子引出,1路JTAG调试接口,1路ADC接口。 米尔 i.MX 91 核心配置型号 表 MYC-LMX91核心选型表米尔
    发表于 05-30 11:20

    【评测试用】合众HZ-T536开发板免费试用体验

    【评测试用】合众HZ-T536开发板免费试用体验
    的头像 发表于 05-27 08:05 685次阅读
    【评测<b class='flag-5'>试用</b>】合众HZ-T536<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>体验

    NXP i.MX 91开发板#支持快速创建基于Linux®的边缘器件

    NXP Semiconductors FRDM i.MX 91开发板设计用于评估i.MX 91应用处理器,支持快速创建基于Linux ^®^ 的边缘器件。该开发板还设计用于入门级Lin
    的头像 发表于 05-19 10:55 1990次阅读
    NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>开发板</b>#支持快速创建基于Linux®的边缘器件

    NXP基于i.MX 91应用处理器打造的FRDM i.MX 91开发板特性参数详解

    FRDM i.MX 91开发板。该开发板基于i.MX 91应用处理器打造,专为加速工业与物联网的开发而设计,提供了一种经济高效、安全且具有多
    的头像 发表于 03-21 09:37 12.3w次阅读
    NXP基于<b class='flag-5'>i.MX</b> 91应用处理器打造的FRDM <b class='flag-5'>i.MX</b> 91<b class='flag-5'>开发板</b>特性参数详解

    NXP入门级Linux应用开发板,FRDM i.MX 91详解

    FRDM平台新品发布 FRDM i.MX 91开发板是一款低成本、体积小巧的开发板,集成了恩智浦i.MX 91应用处理器和IW610 Wi-Fi 6三射频解决方案,专为入门级Linux
    的头像 发表于 03-14 09:43 2797次阅读
    NXP入门级Linux应用<b class='flag-5'>开发板</b>,FRDM <b class='flag-5'>i.MX</b> 91详解

    有奖试用!!RA-Eco-RA4M2-100PIN-V1.0开发板试用活动报名

    RA-Eco-RA4M2-100PIN-V1.0开发板试用活动
    的头像 发表于 03-13 12:10 823次阅读
    有奖<b class='flag-5'>试用</b>!!RA-Eco-RA4<b class='flag-5'>M2</b>-100PIN-V1.0<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>活动报名

    NXP i.MX 93 开发板#提供高效的机器学习 支持高能效的边缘计算

    的GoPoint,通过提供全面的演示,加快各种用例的产品上市进程。 *附件:NXP i.MX 93 开发板 用户设计手册.pdf NXP i.MX 93 *附件:
    的头像 发表于 03-10 15:30 2514次阅读
    NXP <b class='flag-5'>i.MX</b> 93 <b class='flag-5'>开发板</b>#提供高效的机器学习 支持高能效的边缘计算

    NXP首款搭载MPU的FRDM产品怎么样?FRDM i.MX93开发板开箱速览

    近期,NXP将i.MX 93系列处理器引入了FRDM系列产品线,推出了FRDM i.MX 93开发板,作为首款配备i.MX MPU的FRDM
    的头像 发表于 02-26 14:56 2363次阅读
    NXP首款搭载MPU的FRDM产品怎么样?FRDM <b class='flag-5'>i.MX</b>93<b class='flag-5'>开发板</b>开箱速览

    恩智浦推出FRDM i.MX 93开发板

    备受嵌入式开发者青睐的恩智浦FRDM开发平台,迎来了一位新成员——FRDM i.MX 93开发板,这也是第一块配备i.MX MPU的FRDM
    的头像 发表于 02-21 14:22 2899次阅读

    NXP推出FRDM i.MX 93开发板, 助力现代工业与边缘智能开发

    近日,恩智浦半导体(NXP Semiconductor)推出了FRDM i.MX 93开发板,这是FRDM系列中第一款基于MPU推出的开发板,以低成本、紧凑的设计为核心,搭载了NXP i.MX
    的头像 发表于 02-21 09:19 2627次阅读
    NXP推出FRDM <b class='flag-5'>i.MX</b> 93<b class='flag-5'>开发板</b>, 助力现代工业与边缘智能<b class='flag-5'>开发</b>