首页 > 其他分享 >(3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

(3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

时间:2022-12-25 14:01:24浏览次数:46  
标签:src include QT void OpenCV ui PI MainWindow QImage

从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

1综述​​​2环境架设
3两个例子
4程序框架
5编译使用最新opencv
6综合实验
7拾遗



一、第一个例子



     其实在目前这种情况下,配置OpenCV+QT的环境还是非常直接,简单的。



     最为重要的是编写正确的.pro文件,再原有基础上添加以下内容:



INCLUDEPATH += /usr / include /opencv \
                /usr / include /opencv2
LIBS += /usr /lib /gnueabihf /libopencv_highgui.so \
        /usr /lib /gnueabihf /libopencv_core.so    \
        /usr /lib /gnueabihf /libopencv_imgproc.so




(3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练_图像处理


 

#
include "mainwindow.h"

# include "ui_mainwindow.h"

# include <opencv2
/core
/core.hpp
>

# include <opencv2
/highgui
/highgui.hpp
>

# include <opencv2
/imgproc
/imgproc.hpp
>

# include <QFileDialog
>

using namespace cv;
MainWindow :
:MainWindow(QWidget
*parent)
:

QMainWindow(parent),
ui( new Ui :
:MainWindow)

{
ui -
>setupUi(
this);
}
MainWindow :
:
~MainWindow()

{
delete ui;
}
void MainWindow :
:on_pushButton_clicked()

{
//第3个参数表示查找文件时从哪个目录开始,如果为"."的话,表示从该工程目录开始查找,最后那个参数的过滤器的名字之间

//要用空格,否则识别不出来

QString img_name = QFileDialog
:
:getOpenFileName(
this, tr( "Open Image"),
".",tr(
"Image Files(*.png *.jpg *.jpeg *.bmp)"));

//toAscii()返回8位描述的string,为QByteArray,data()表示返回QByteArray的指针,QByteArray为字节指针

//现在已改为toLatinl函数

Mat src = imread( img_name.toLatin1().data());

cvtColor( src, src, CV_BGR2RGB );
QImage img = QImage( (
const unsigned char
*)(src.data), src.cols, src.rows, QImage
:
:Format_RGB888 );

ui -
>label
-
>setPixmap( QPixmap
:
:fromImage(img) );

img_name.clear();
}


二、第二个例子


     图像处理必须和摄像头打交道,具体的配置请看下一节。但是现在,如果直接使用USB摄像头,也应该能够进行操作:



(3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练_ide_02


头文件:

#
ifndef MAINWINDOW_H
# define MAINWINDOW_H
# include <QMainWindow >


//新添加

# include <opencv2 /core
/core.hpp
>

# include <opencv2 /highgui
/highgui.hpp
>

# include <opencv2 /imgproc
/imgproc.hpp
>

# include <QFileDialog >

# include <QImage >

# include <QTimer >
// 设置采集数据的间隔时间

using namespace cv;

//helper函数

QPixmap Mat2QImage(Mat src);
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public
:

explicit MainWindow(QWidget *parent =
0);

~MainWindow();
private slots :
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void readFarme(); // 读取当前帧信息
void on_pushButton_4_clicked();
private
:

Ui : :MainWindow
*ui;

QTimer *timer;
QImage *imag;
VideoCapture *videocapture; // 视频获取结构, 用来作为视频获取函数的一个参数

Mat matFrame; //申请IplImage类型指针,就是申请内存空间来存放每一帧图像
bool bMethod; //是否使用算法
};
# endif // MAINWINDOW_H



#
include "mainwindow.h"
# include "ui_mainwindow.h"
using namespace cv;

//全局变量

Mat src;
Mat gray;
Mat tmp;
Mat dst;
MainWindow : :MainWindow(QWidget
*parent)
:QMainWindow(parent),ui(
new Ui : :MainWindow)

{
ui - >setupUi(
this);
timer = new QTimer( this);
imag = new QImage(); // 初始化
connect(timer, SIGNAL(timeout()), this, SLOT(readFarme())); // 时间到,读取当前摄像头信息
bMethod = false; //是否使用算法
}
MainWindow : :
~MainWindow()

{
delete ui;
}

//事件驱动


//打开摄像头

void MainWindow : :on_pushButton_clicked()

{
//打开摄像头,从摄像头中获取视频
videocapture = new VideoCapture( 0);
// 开始计时,超时则发出timeout()信号
timer - >start(
33);

}

//读取下一Frame图像

void MainWindow : :readFarme()

{
// 从摄像头中抓取并返回每一帧
videocapture - >read(matFrame);

//图像处理
if(bMethod)
{
cvtColor(matFrame,tmp,COLOR_BGR2GRAY);
Canny(tmp,dst, 30, 255);

}
else

{
dst = matFrame.clone();
}
// 格式转换
QPixmap qpixmap = Mat2QImage(dst);
// 将图片显示到label上
ui - >label
-
>setPixmap(qpixmap);

}

//拍照

void MainWindow : :on_pushButton_2_clicked()

{
// 格式转换
QPixmap qpixmap = Mat2QImage(dst);
// 将图片显示到label上
ui - >label_2
-
>setPixmap(qpixmap);

}

//执行算法

void MainWindow : :on_pushButton_4_clicked()

{
bMethod = !bMethod;

}

//关闭摄像头

void MainWindow : :on_pushButton_3_clicked()

{
timer - >stop();
// 停止读取数据。

videocapture - >release();

}

//helper函数//


//格式转换

QPixmap Mat2QImage(Mat src)
{
QImage img;
//根据QT的显示方法进行转换
if(src.channels() == 3)

{
cvtColor( src, tmp, CV_BGR2RGB );
img = QImage( ( const unsigned char
*)(tmp.data), tmp.cols, tmp.rows, QImage
:
:Format_RGB888 );

}
else

{
img = QImage( ( const unsigned char
*)(src.data), src.cols, src.rows, QImage
:
:Format_Grayscale8 );

}
QPixmap qimg = QPixmap :
:fromImage(img) ;

return qimg;
}

 

标签:src,include,QT,void,OpenCV,ui,PI,MainWindow,QImage
From: https://blog.51cto.com/jsxyhelu2017/5968136

相关文章

  • 使用CMake构建OpenCV项目
    这篇文章我们来对我们的安装进行测试,并介绍如何用CMake工具快捷地构建OpenCV项目。为了使整个项目更加条理,我们的文件夹采用如下组织方式:binbuildCMakeLists.t......
  • MQTT.fx客户端的安装及开始
    MQTT.fx客户端的安装及开始下载:官网:http://mqttfx.org最新版本,但是需要安装许可证,只能免费试用三个月百度网盘:只有1.7的版本,无需许可证(推荐)Windows版(64位)ht......
  • GOQTTemplate简单介绍
    集合OpenCV的视频功能和QCamera的摄像头接口,开发出易于理解的、结构简单的摄像头控制和采集框架。MainWindow::MainWindow(QWidget*parent):QMainWin......
  • linux下对qt编写的程序进行部署
    当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题。对于我们在Linux下基于QT编写的图像处理程序,......
  • 安装GDB-ImageWatch ,在QT中查看图像
    GDB_ImageWatch是在Linux下基于QT编写图像处理程序的调试程序。由于并非像ImageWatch一样由官方提供,而是在github上以代码的方式进行提供,我们在使用的时候需要自己编......
  • 在Linux下OpenCV的下载和编译
    完整从代码编译OpenCV在很多情况下是必须的。总体上来看,都是下载、编译、配置这三个过程,其中一些细节值得注意,记录如下。这里以ubuntu为例,其他发行版可能略有不同。1......
  • 基于OpenCV做“三维重建”(2)--封装标定过程
    /*------------------------------------------------------------------------------------------*\Thisfilecontainsmaterialsupportingchapter11ofth......
  • Android + OpenCV - Finding extreme points in contours
    原文链接:​​http://answers.opencv.org/question/134783/android-opencv-finding-extreme-points-in-contours/​​导  读:本例子使用轮廓分析,寻找到轮廓的极点;使用......
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练1综述2环境架设3两个例子4程序框架5编译使用最新opencv6综合实验7拾遗一、PI的综述   树莓派(Raspber......
  • AnswerOpenCV学习_Opencv multiple circle detection in a image
    ​​https://answers.opencv.org/question/234920/opencv-multiple-circle-detection-in-a-image/​​​​​​原图如上,目标是从这副图片中寻找“细胞”......