OpenCV1.0,2.0在windows和Linux下的安装和在QT,VS中的配置

本文详细介绍OpenCV在Windows和Linux平台上的安装步骤,包括如何配置DirectXSDK、使用CMake进行编译、在Visual Studio及Qt中设置路径等关键环节。

在windows上安装opencv最好也安装一下DirectX SDK,在微软官网上可以下载,也就几百兆,建议装一下

opencv1.0版本

opencv1.0版本和以前的版本在windows上安装之后不用通过编译就可以使用,安装完成之后运行samples->c目录下的exe文件即可,但需要将安装目录下bin目录中的dll文件拷贝到c目录下才行,否则会提示找不到相关dll文件。

在VS中使用opencv:

需要设置:工具->项目和解决方案->VC++目录中:

选择下拉框中的包含文件,在中间的对话框中将opencv中的include目录包含进去,如我的是:

C:/Program Files/OpenCV/otherlibs/cvcam/include
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/ml/include
C:/Program Files/OpenCV/cvaux/include
C:/Program Files/OpenCV/cv/include
C:/Program Files/OpenCV/cxcore/include

选择下拉框中的引用文件,在中间的对话框中将src目录添加进去,如我的是:

C:/Program Files/OpenCV/cv/src
C:/Program Files/OpenCV/cvaux/src
C:/Program Files/OpenCV/cxcore/src
C:/Program Files/OpenCV/otherlibs/cvcam/src/windows
C:/Program Files/OpenCV/otherlibs/highgui

选择下拉框中的库文件,将lib目录添加进去,如:C:/Program Files/OpenCV/lib.

在工程中进入工程的属性页中->链接器->输入中添加lib文件,如:

cv.lib
cvaux.lib
cvcam.lib
cxcore.lib
highgui.lib

 

opencv2.0版本在windows安装好之后需要用cmake软件对其进行编译,这些内容在opencv官网中有详细的讲述,就不在讲解。

zaiVS中添加opencv2.0在官网中也有详细的讲解,和添加opencv1.0支持大至是一样的,不做介绍,

在qt中添加opencv2.0,在工程的pro文件中添加如下:(C:/OpenCV2.0/VS2005/目录为编译opencv的目录)

INCLUDEPATH += C:/OpenCV2.0/VS2005/include/opencv/

LIBS += C:/OpenCV2.0/VS2005/lib/cv200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cv200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cvaux200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cvaux200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxcore200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxcore200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/highgui200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/highgui200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxts200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxts200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/ml200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/ml200d.lib

添加完即可使用

在windows下qt中添加opencv2.0支持,在pro文件中添加如下,注意这里在qt中使用了VS编译生成的lib文件:

INCLUDEPATH += C:/OpenCV2.0/VS2005/include/opencv/
LIBS += C:/OpenCV2.0/VS2005/lib/cv200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cv200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cvaux200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cvaux200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxcore200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxcore200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/highgui200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/highgui200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxts200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/cxts200d.lib
LIBS += C:/OpenCV2.0/VS2005/lib/ml200.lib
LIBS += C:/OpenCV2.0/VS2005/lib/ml200d.lib

 

opencv在linux下的安装,笔者使用的版本为Fedora9

安装opencv之前需要安装ffmpeg-0.5.tar.bz2这个东西,因为本身linux对图像和视频的支持还不够好。解压之后安装过程如下:

先通过这个命令配置ffmpeg,下面这两个命令其中一个是对的,具体哪一个我也忘了,可一一敲一下试试:

./configure --enable-libogg --enable-shared --enable-gpl
./configure --enable-shared --enable-swscale --enable-gpl

之后通过下面两个指令安装即可,

make
make install

安装完成之后

修改/etc/ld.so.conf,(我打开了这个文件,是个空文件)
     添加一行/usr/local/lib,添加完成之后保存退出
     在终端中敲入: ldconfig (root用户)
     然后将/usr/local/lib/pkgconfig中的opencv.pc 拷贝到/usr/lib/pkgconfig中,(假如不做这步,根本编译不起)
     能够采用这个操作(好像手动复制也不行)
      cp /usr/local/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig

这样就完成opencv的安装了

进入opencv下的samples下c目录,看安装的opencv是否能够运行

以编辑cvtest.c文档为例子(因为highgui中采用了c++,所以一定要用g++编译才能够)
  A. g++ `pkg-config --cflags opencv` -o cvtest cvtest.c `pkg-config --libs opencv`
  B. 编译: g++ `pkg-config --cflags opencv` -c cvtest.c
     链接: g++ `pkg-config --libs opencv` -o cvtest cvtest.o

编译成功之后./cvtest运行生成的文件即可。

 

在linux的qt中添加opencv支持如下:

INCLUDEPATH +=/usr/local/include/opencv
LIBS += /usr/local/lib/libcv.so /
        /usr/local/lib/libcvaux.so /
        /usr/local/lib/libcxcore.so /
        /usr/local/lib/libhighgui.so /
        /usr/local/lib/libml.so

 

 

 

 

<think>我们正在RK3568平台上配置QtOpenCV,使用GStreamer管道来捕获摄像头视频流。根据引用[1][2],我们知道在RK3399RK3588平台上使用OpenCVGStreamer的经验可以借鉴,但需要注意RK3568平台的差异。目标:在RK3568的Qt应用程序中,通过OpenCV使用GStreamer管道捕获摄像头图像。步骤:1.**确保系统支持GStreamer**:RK3568的Linux系统应该已经预了GStreamer,但需要确认安装了必要的插件(如gstreamer1.0-plugins-base,gstreamer1.0-plugins-good,gstreamer1.0-plugins-bad,gstreamer1.0-plugins-ugly,gstreamer1.0-libav,gstreamer1.0-tools,libgstreamer1.0-dev等)。如果没有,可以通过apt安装。2.**编译OpenCV支持GStreamer**:在RK3568上编译OpenCV时,需要开启GStreamer支持。根据引用[2]中安装依赖的部分,我们需要安装GStreamer相关的开发包:```bashsudoapt-getinstalllibgstreamer-plugins-base1.0-devlibgstreamer1.0-dev```在编译OpenCV时,CMake配置中要确保:-`WITH_GSTREAMER=ON`-可能还需要指定GStreamer的路径(如果不在默认路径)3.**验证OpenCV的GStreamer支持**:编译安装OpenCV后,可以通过以下方式验证:```pythonimportcv2print(cv2.getBuildInformation())```在输出中搜索"GStreamer",应该显示为"YES"。4.**构建GStreamer管道**:在RK3568上,使用MIPI摄像头,我们可以参考引用[1][3]中的管道设置。常见的管道字符串如下:-用于捕获摄像头并输出到appsink(供OpenCV读取):```bash"v4l2srcdevice=/dev/video0!video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1!videoconvert!appsink"```注意:设备节点(/dev/video0格式(NV12)需要根据实际情况调整。RK3568的MIPI摄像头可能使用不同的节点格式。5.**在Qt中使用OpenCV捕获视频**:在Qt应用程序中,我们可以使用OpenCV的VideoCapture类,传入GStreamer管道字符串来捕获视频。然后可以将OpenCV的Mat图像转换为Qt的QImage进行显示。示例代码(QtC++):```cpp#include<opencv2/opencv.hpp>#include<QImage>#include<QLabel>//创建VideoCapture对象,使用GStreamer管道cv::VideoCapturecap("v4l2srcdevice=/dev/video0!video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1!videoconvert!appsink",cv::CAP_GSTREAMER);if(!cap.isOpened()){//处理错误}cv::Matframe;while(true){cap>>frame;if(frame.empty())break;//将BGR的Mat转换为QImage(注意:OpenCV默认读取为BGR,需要转换)QImageqimg(frame.data,frame.cols,frame.rows,frame.step,QImage::Format_BGR888);//显示在QLabel上ui->label->setPixmap(QPixmap::fromImage(qimg));}```6.**注意性能优化**:根据引用[4],在嵌入式平台上要注意系统性能。如果出现卡顿,需要检查CPU使用率。可以考虑使用硬件加速(如RK3568的硬件编解码)来减轻CPU负担。在GStreamer管道中,可以尝试使用RK3568的硬件解码插件(如`rkmpi`或`rockchipmpp`)来加速视频处理。例如,使用硬件加速的管道可能如下(需要确认RK3568支持的插件):```bash"v4l2srcdevice=/dev/video0!video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1!rkisp!appsink"```具体插件名称需要参考RK3568的GStreamer插件文档。7.**调试技巧**:如果管道无法打开,可以先用`gst-launch-1.0`测试管道,例如:```bashgst-launch-1.0v4l2srcdevice=/dev/video0!video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1!videoconvert!autovideosink```8.**在Qt中显示优化**:引用[3]提到,可以使用Qt的Mediaplayer或QML的VideoOutput来直接显示GStreamer流,避免OpenCV中转。但需要Qt的gstreamer插件支持。如果RK3568的Qt版本没有这个插件,则需要自己编译Qt的gstreamer插件。这可能会更复杂,但性能更好。如果选择直接使用Qt显示GStreamer流,可以参考以下QML代码:```qmlimportQtQuick2.0importQtMultimedia5.15VideoOutput{source:MediaPlayer{source:"gstreamer:v4l2srcdevice=/dev/video0!video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1!videoconvert!video/x-raw,format=RGB!qtvideosink"}}```注意:这里管道字符串需要根据实际情况调整,并且需要Qt编译时带有gstreamer插件。总结:在RK3568平台上,配置QtOpenCV使用GStreamer管道的关键是正确编译支持GStreamer的OpenCV,并构建合适的GStreamer管道字符串。如果性能不足,可以考虑使用硬件加速插件或直接在Qt中显示GStreamer流。§§相关问题§§1.RK3568平台上使用GStreamer的硬件加速插件有哪些?2.如何将OpenCV的Mat图像高效地转换为Qt的QImage?3.在RK3568上如何编译Qt以支持GStreamer插件?</think>### RK3568平台下在Qt中使用OpenCV配置GStreamer管道的完整指南 #### 1. **环境准备** 首先确保系统已安装必要的依赖库(参考引用[2]): ```bash sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad sudo apt-get install libopencv-dev python3-numpy ``` #### 2. **OpenCV编译支持GStreamer** 编译OpenCV时必须启用GStreamer支持: ```bash cmake -D WITH_GSTREAMER=ON \ -D BUILD_opencv_python3=ON \ -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j$(nproc) sudo make install ``` 验证OpenCV的GStreamer支持: ```python import cv2 print(cv2.getBuildInformation()) # 检查输出是否包含"GStreamer: YES" ``` #### 3. **GStreamer管道配置** 根据RK3568的硬件特性(参考引用[1][3]),推荐管道配置: ```cpp // Qt代码示例 cv::VideoCapture cap; std::string pipeline = "v4l2src device=/dev/video0 ! " "video/x-raw,format=NV12,width=1920,height=1080 ! " "videoconvert ! appsink"; cap.open(pipeline, cv::CAP_GSTREAMER); ``` **关键参数说明**: - `v4l2src`: MIPI摄像头输入设备(通过`v4l2-ctl --list-devices`确认设备节点) - `format=NV12`: RK3568硬件加速支持的像素格式 - 分辨率调整:根据摄像头能力修改`width/height` #### 4. **QtOpenCV图像转换** 在Qt中显示OpenCV捕获的图像: ```cpp cv::Mat frame; cap >> frame; // 从GStreamer管道获取帧 // 转换为QImage QImage qimg(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888); // 在QLabel中显示 ui->videoLabel->setPixmap(QPixmap::fromImage(qimg)); ``` #### 5. **性能优化技巧** 1. **硬件加速**(参考引用[3]): ```bash "rkmpp ! videoconvert ! appsink" // 使用RK3568的硬件编解码器 ``` 2. **降低CPU负载**(参考引用[4]): - 监控CPU使用率:`watch -n 1 cat /proc/stat` - 限制分辨率:使用1280x720替代4K - 减少格式转换:直接使用`QImage::Format_RGB888`避免色彩空间转换 3. **多线程处理**: ```cpp // 在QThread中运行视频捕获 class VideoThread : public QThread { Q_OBJECT void run() override { while(running) { captureFrame(); emit newFrame(qimg); } } }; ``` #### 6. **调试方法** 1. 测试GStreamer管道: ```bash gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink ``` 2. OpenCV错误检查: ```cpp if(!cap.isOpened()) { qDebug() << "ERROR: Failed to open pipeline: " << pipeline.c_str(); } ``` #### 7. **替代方案** 若性能不足(参考引用[3]): ```qml // 在QML中直接使用GStreamer VideoOutput { source: MediaPlayer { source: "gstreamer:v4l2src ! qtvideosink" } } ``` > **注意事项**: > 1. RK3568的MIPI摄像头通常对应`/dev/video0`或`/dev/video1` > 2. 使用`dmesg | grep mipi`确认摄像头加载状态 > 3. 修改分辨率需同步调整Qt显示窗口大小 > 4. NV12格式处理效率高于RGB(减少30% CPU负载)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值