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

简介: 从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cnblogs.
一、第一个例子
     其实在目前这种情况下,配置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
        指向正确的include和lib文件。实现以下结果,读取显示lena.jpg
 
# 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();
}
  主要代码已经非常类似windows下的编写方式,唯一不同的就是添加了QImage和mat之间的转换。
二、第二个例子
     图像处理必须和摄像头打交道,具体的配置请看下一节。但是现在,如果直接使用USB摄像头,也应该能够进行操作:
头文件:
# 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;
}
 
  





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
2月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
104 7
基于qt的opencv实时图像处理框架FastCvLearn实战
|
2月前
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
127 9
基于QT的OCR和opencv融合框架FastOCRLearn实战
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
68 2
|
2月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
44 10
WK
|
3月前
|
计算机视觉 Python
如何使用OpenCV进行基本图像处理
使用OpenCV进行基本图像处理包括安装OpenCV,读取与显示图像,转换图像颜色空间(如从BGR到RGB),调整图像大小,裁剪特定区域,旋转图像,以及应用图像滤镜如高斯模糊等效果。这些基础操作是进行更复杂图像处理任务的前提。OpenCV还支持特征检测、图像分割及对象识别等高级功能。
WK
48 4
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
165 1
|
5月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
77 1
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
322 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
49 4