问题1:QT+OpenCV配置
新建一个工程,在“.pro”文件中配置OpenCV的库文件:
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_aruco.so \
/usr/local/lib/libopencv_bgsegm.so \
/usr/local/lib/libopencv_bioinspired.so \
/usr/local/lib/libopencv_calib3d.so \
/usr/local/lib/libopencv_ccalib.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_datasets.so \
/usr/local/lib/libopencv_dnn.so \
/usr/local/lib/libopencv_dpm.so \
/usr/local/lib/libopencv_face.so \
/usr/local/lib/libopencv_features2d.so \
/usr/local/lib/libopencv_flann.so \
/usr/local/lib/libopencv_fuzzy.so \
/usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_imgcodecs.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_ml.so \
/usr/local/lib/libopencv_objdetect.so \
/usr/local/lib/libopencv_optflow.so \
/usr/local/lib/libopencv_phase_unwrapping.so \
/usr/local/lib/libopencv_photo.so \
/usr/local/lib/libopencv_plot.so \
/usr/local/lib/libopencv_reg.so \
/usr/local/lib/libopencv_rgbd.so \
/usr/local/lib/libopencv_saliency.so \
/usr/local/lib/libopencv_shape.so \
/usr/local/lib/libopencv_stereo.so \
/usr/local/lib/libopencv_stitching.so \
/usr/local/lib/libopencv_structured_light.so \
/usr/local/lib/libopencv_superres.so \
/usr/local/lib/libopencv_surface_matching.so \
/usr/local/lib/libopencv_text.so \
/usr/local/lib/libopencv_tracking.so \
/usr/local/lib/libopencv_video.so \
/usr/local/lib/libopencv_videoio.so \
/usr/local/lib/libopencv_videostab.so \
/usr/local/lib/libopencv_xfeatures2d.so \
/usr/local/lib/libopencv_ximgproc.so \
/usr/local/lib/libopencv_xobjdetect.so \
/usr/local/lib/libopencv_xphoto.so \
问题2:GTK+2.x要先于OpenCV安装
由于安装QT之前电脑上已经安装了OpenCV并将opencv_contrib部分一起进行了编译,因此运行QT时产生如下报错:
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow......
多方尝试都未解决,最终还是不得不重新安装OpenCV.
OpenCV卸载
进入OpenCV安装路径下,找到编译时创建的文件夹build(或release),进入build文件夹下,在终端执行:
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
删除对应文件.
重新编译OpenCV
由于之前已经下载了OpenCV以及opencv_contrib并编译过,因此这里只需要重新对其进行编译.
首先将opencv_contrib.zip提取到OpenCV目录下,同时在该目录下新建一个文件夹build.
进入build目录下,执行cmake生成makefile文件:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/w/package/opencv-3.3.1/opencv_contrib-3.3.1/modules/ ..
其中OPENCV_EXTRA_MODULES_PATH=/home/w/package/opencv-3.3.1/opencv_contrib-3.3.1/modules/ .. 对应的是实际opencv_contrib目录下的models目录.(后面的..不可省略).
生成完毕后,继续make:
make -j4
sudo make install
用make install,可能会由于权限问题报如下错误:
CMake Error at cmake_install.cmake:36 (file): file cannot create directory:......
然后在QT中配置好的新建工程里,使用OpenCV进行读入图片测试:
#include <QCoreApplication>
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mat src;
src = imread("/home/w/mycode/QT/img/daibola2.jpg", IMREAD_COLOR);
if(src.empty())
{
std::cout<<"can not load the image... \n"<<std::endl;
}
namedWindow("src", 1);
imshow("src", src);
waitKey();
return a.exec();
}