QT内使用OpenCV

本文详细介绍了在QT环境中配置Opencv的过程及遇到的问题,包括解决无法识别函数、显示图像失败等问题的方法,并提供了从安装到编译的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在QT内使用Opencv,调试了好久总是出问题。

开始在pro文件内进行了opencv的配置,然后就是不能识别#include包含文件,后来不知道什么原因,神奇地 能够识别包含了。

可是,新的问题出现了,不能够识别cv函数,后来发现仅仅是不能识别opencv2.4函数,opencv1.0的函数还是可以识别的,使用IplImage能够正常显示图像。

后来不知道怎么回事,又神奇地可以识别opencv2.4.9函数了,可是此时不能显示图像,显示问题“qt opencv error assertion failed size.widht>0 && size.height>0”。

百度,发现需要使用:

IplImage *pImg=cvLoadImage("e:/image/face1.bmp",1);
Mat image(pImg);

此时,可以正常显示图像。

仍存在问题:如果试图直接显示图像,使用代码:

cvLoadImage("a.jpg",1);

仍显示无法发现图像。

ps:关闭当前工程后,再次打开又无法识别opencv函数了。

-------------------------------------------------------------------------------------------------

2014.5.18更新

opencv249,如果不进行编译,也是可以是运行opencv2.0以前的函数的。但是opencv2.0的一些函数会无法运行,因此需要编译。

直接下载qt mingw版本,然后使用cmake配合其自带的mingw进行编译。

注意:不需要自己下载mingw,qt自带的可以完成。

几个问题:

1.第一次编译没有选择with_qt。一边看别人的资料,一边编译。编译成功了,才发现这个问题。重新编译,就不行了。

后来重新下载了qt,配置了路径才好。可能是因为路径没有配置,而且注意,为了避免出现问题,最好重启系统。

2.注意,需要配置完成后最好使用Mat、IplImage分别测试一下。我第一次就是总是不行,使用IplImage才发现仅仅是不能识别Mat。

3.安装qt是要选择mingW。

4.imshow的标题无法正常显示(为乱码)已经解决。

5.文件需要使用绝对路径,相对路径仍旧不能识别。

路径的问题是因为没有注意区分工作路径、当前路径。找到编译文件,可以识别其特定的文件。

=================================================================================================

2014-5-21更新

在实验室机器上重新配置安装步骤:

1.下载opencv并安装。当前最新版本为249,直接使用的以前下载的248版本。

2.下载qt并安装。注意是mingw版本,不需要vs版本。

3.下载cmake,并对opencv的source文件进行编译。手动选择gcc、g++编译器。

配置好后,在生成前选择“with_QT"、"with_OPENGL".

4.进入cmd,到配置目标路径下运行Mingw32-make,此过程较长,需要半小时左右。

运行mingw32-make install,此过程较快。

5.复制opencv安装目下opencv/bulide/inlude目录到配置目标下。

6.添加目标目录/bin到系统path下。

7.创建qt工程,更改pro文件。

INCLUDEPATH+=e:\cv248\include\opencv\
                    e:\cv248\include\opencv2\
                    e:\cv248\include

LIBS+=e:\cv248\lib\libopencv_calib3d248.dll.a\
        e:\cv248\lib\libopencv_contrib248.dll.a\
        e:\cv248\lib\libopencv_core248.dll.a\
        e:\cv248\lib\libopencv_features2d248.dll.a\
        e:\cv248\lib\libopencv_flann248.dll.a\
        e:\cv248\lib\libopencv_gpu248.dll.a\
        e:\cv248\lib\libopencv_highgui248.dll.a\
        e:\cv248\lib\libopencv_imgproc248.dll.a\
        e:\cv248\lib\libopencv_legacy248.dll.a\
        e:\cv248\lib\libopencv_ml248.dll.a\
        e:\cv248\lib\libopencv_objdetect248.dll.a\
        e:\cv248\lib\libopencv_video248.dll.a

8.在工程内显示图像示例。

#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
    Mat image;
    image=imread("e:/a.jpg");
    imshow("li",image);
    waitKey();
    return 0;
}

9.查看效果。


===================================================

参考资料:

1.openCV在VS2010配置完后,错误OpenCV Error: Assertion failed (size.width>0 && size.height>0)的解决方案

http://hi.baidu.com/meng_ling_hui/item/89294f0038e1c26dd45a11e2

2.OpenCV Error: Assertion Failed (size.width>0 && size.height>0) in unknown function

http://answers.opencv.org/question/18135/opencv-error-assertion-failed-sizewidth0/

3.QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置

http://www.cnblogs.com/liu-jun/archive/2012/09/26/Jacky_Liu.html

4.[OpenCV] -- win7下配置OpenCV的Qt开发环境

http://blog.youkuaiyun.com/qiurisuixiang/article/details/8665278

5.win7上qt5.1.1 opencv2.4.7 cmake2.8.12.1环境搭建(关键在环境变量)

http://blog.youkuaiyun.com/jiebaoabcabc/article/details/17097765

qt中运行以下程序提示报错 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/filters/voxel_grid.h> #include <pcl/kdtree/kdtree_flann.h> #include <pcl/common/time.h> //计时 #include <pcl/filters/passthrough.h> #include <pcl/filters/statistical_outlier_removal.h> #include <pcl/ModelCoefficients.h> // 模型系数 #include <pcl/sample_consensus/model_types.h> // 分割模型类型 #include <pcl/segmentation/sac_segmentation.h> // RANSAC #include <pcl/filters/model_outlier_removal.h> // 模型滤波器 #include <pcl/visualization/cloud_viewer.h> // 可视化 #include <pcl/visualization/pcl_visualizer.h> #include <pcl/sample_consensus/sac_model_cylinder.h> // 圆柱 #include <pcl/filters/extract_indices.h> #include <pcl/common/pca.h> #include <pcl/sample_consensus/ransac.h> // RANSAC #include <pcl/search/kdtree.h> // KDtree搜索 #include <pcl/features/normal_3d.h> // 法线估计 #include <pcl/features/normal_3d_omp.h> #include <pcl/segmentation/region_growing.h> //区域生长 #include <pcl/common/angles.h> #include <pcl/search/search.h> #include <pcl/filters/project_inliers.h> #include <pcl/filters/crop_box.h> #include <pcl/features/moment_of_inertia_estimation.h> #include <pcl/sample_consensus/sac_model_circle3d.h> // 拟合3D圆 #include <pcl/visualization/pcl_visualizer.h> #include <pcl/common/common.h> #include<pcl/octree/octree.h> #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <opencv2/core/core_c.h> #include <opencv2/imgproc.hpp> #include <opencv2/calib3d.hpp> #include <opencv2/core/eigen.hpp> #include "EuclideanCluster.h" #include <pcl/console/time.h> // 控制台计算时间 #include <QApplication> #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; using pcl::visualization::PointCloudColorHandlerGenericField; using pcl::visualization::PointCloudColorHandlerCustom; typedef struct Point3D { Mat_<double> mat1 ; float angle; }; pcl::PointCloud<pcl::PointXYZ>::Ptr Voxel_Grid_Filtering(pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud,int numb
03-19
<think>好的,我现在要解决用户在QT环境中编译或运行PCL程序时遇到的错误。首先,我需要理解用户的问题。用户提到了多个PCL模块,比如pcd_io、point_types等,还涉及到OpenCV,可能是在编译时链接库出现问题。根据用户提供的引用内容,他们的CMakeLists.txt可能存在配置问题,尤其是链接库的部分。 首先,用户引用了几个CMake配置的例子,其中提到需要正确链接PCL_LIBRARIES。例如,引用1中用户发现没有链接PCL_LIBRARIES,添加后解决了问题。这说明在QT项目中,正确配置CMakeLists.txt,特别是target_link_libraries部分,是非常重要的。 接下来,用户引用2展示了另一个CMakeLists.txt的例子,其中正确使用了find_package和target_link_libraries。用户可能没有正确设置这些部分,导致编译器找不到PCL的库文件。另外,引用3提到在find_package时需要指定正确的组件,如common、io等,这可能也是用户的问题所在,没有包含所有必要的组件。 用户引用4提到了通过环境变量添加包含路径,但可能没有正确配置CMake的include_directories,导致头文件找不到。特别是在QT项目中,可能需要显式地包含PCL和Eigen的路径,因为PCL依赖Eigen。 然后,我需要考虑用户在QT使用PCL可能遇到的其他问题。例如,QT的.pro文件是否配置正确,或者是否在CMake中正确设置了C++标准(如C++11),因为PCL可能需要特定的标准。引用2中提到了设置-std=c++11,这也是需要注意的。 另外,用户提到的错误可能包括未定义的引用(undefined reference),这通常是由于链接库缺失或顺序不正确造成的。PCL的库需要按照依赖顺序链接,可能需要先链接PCL的组件,再链接其他库如OpenCV。 还有,用户的环境变量是否正确设置?比如PCL_ROOT是否指向正确的安装路径。如果PCL安装在非标准位置,可能需要通过CMake的find_package参数指定路径,或者在系统中设置相应的环境变量。 最后,用户可能需要检查他们的代码是否正确引用了PCL的头文件,例如是否使用了正确的命名空间,或者是否存在拼写错误。此外,运行时错误可能与动态链接库的路径有关,比如LD_LIBRARY_PATH是否包含PCL的库路径。 综合以上分析,解决步骤可能包括:检查CMakeLists.txt是否正确配置find_package和target_link_libraries;确保所有必要的PCL组件都被包含;检查包含路径是否正确;确认C++标准设置正确;以及确保环境变量和动态库路径正确。</think>针对QT环境中PCL程序编译/运行报错的解决方案如下: ### 一、基础环境配置 1. **确认PCL安装完整性** - 检查`/usr/include/pcl-1.8`或`/usr/local/include/pcl-1.8`目录是否存在核心头文件[^4] - 验证PCL依赖的第三方库(如Eigen3、Boost)是否安装: ```bash sudo apt-get install libeigen3-dev libboost-all-dev ``` ### 二、CMake配置优化 2. **完善CMakeLists.txt** ```cmake cmake_minimum_required(VERSION 3.5) project(QtPclDemo) set(CMAKE_CXX_STANDARD 14) # 必须使用C++11及以上标准 # QT配置 find_package(Qt5 COMPONENTS Widgets REQUIRED) # PCL配置(必须包含所有使用的组件) find_package(PCL 1.8 REQUIRED COMPONENTS common io search visualization filters kdtree octree ) # OpenCV配置 find_package(OpenCV REQUIRED) include_directories( ${PCL_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} /usr/include/eigen3 # 显式包含Eigen路径 ) add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} Qt5::Widgets ${PCL_LIBRARIES} ${OpenCV_LIBS} ) ``` ### 三、常见问题处理 3. **头文件包含规范** - 在代码中必须使用完整路径包含PCL头文件: ```cpp #include <pcl/io/pcd_io.h> // 正确格式 #include <pcl/filters/voxel_grid.h> ``` 4. **动态库路径配置** -QT Creator中添加运行时库路径: ``` Projects → Build Environment → 添加: LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` ### 四、高级调试技巧 5. **依赖验证方法** - 使用`ldd`命令检查可执行文件的依赖项: ```bash ldd ./QtPclDemo | grep pcl ``` - 通过`pcl-config --cflags`验证包含路径[^3]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值