目录
1.ubantu18.04安装opencv及opencv_contrib
2. _src.type() == CV_8UC1 in function 'cv::equalizeHist'
3.Opencv 解决问题 !_src.empty() in function 'cv::cvtColor'
1.ubantu18.04安装opencv及opencv_contrib
参考:Ubuntu 18.04 安装opencv4.2.0_ubuntu18.04安装opencv4.2.0-CSDN博客
(超详细)Ubuntu18.04下安装及卸载opencv+opencv_contrib_ubuntu18.04卸载opencv-CSDN博客
Ubuntu18.04安装Opencv4.5(最新最详细)_ubuntu安装opencv4.5-CSDN博客
Ubuntu18.04安装Opencv4.5(最新最详细)_ubuntu安装opencv4.5-CSDN博客
opencv地址:GitHub - opencv/opencv at 4.2.0
opencv_contrib地址:GitHub - opencv/opencv_contrib at 4.2.0
1.1安装依赖库:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
常出现的问题:无法定位 libjasper-dev
解决方法:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev
1.2 、解压目录创建build目录
unzip opencv-4.2.0.zip
unzip opencv_contrib-4.2.0.zip
//把opencv_contrib-4.2.0移到opencv_4.2.0中
mv opencv_contrib-4.2.0 ./opencv_4.2.0
cd opencv_4.2.0
mkdir build
1.3、 cmake指令
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_ENABLE_NONFREE:BOOL=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_GENERATE_PKGCONFIG=YES -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.2.0/modules ..
cmake指令结束编译:
sudo make -j12
sudo make install
1.4、配置opencv环境
//打开opencv.conf
sudo gedit /etc/ld.so.conf.d/opencv.conf
//在末尾添加
/usr/local/lib
//保存后执行以下命令,确保配置生效
sudo ldconfig
//打开bash.bashrc
sudo gedit /etc/bash.bashrc
//在文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
//保存后执行以下命令,确保配置生效
sudo updatedb
source /etc/bash.bashrc
1.5、 查看版本
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4
- pkg-config --modversion opencv4 作用:显示已安装的 OpenCV4 的版本号。 意义:这可以帮助你确认系统中安装的 OpenCV 版本,对于确保代码兼容性和排查版本相关问题非常有用。
- pkg-config --cflags opencv4 作用:显示编译 OpenCV4 程序时需要的编译器标志(compiler flags)。 意义:这些标志通常包括头文件的包含路径(-I 选项)。在编译使用 OpenCV 的程序时,你需要将这些标志添加到编译命令中,以确保编译器能找到必要的头文件。
- pkg-config --libs opencv4 作用:显示链接 OpenCV4 库时需要的库文件和链接器标志。 意义:这包括库文件的路径和名称(通常是 -L 和 -l 选项)。在链接使用 OpenCV 的程序时,你需要将这些标志添加到链接命令中,以确保链接器能找到并链接所有必要的 OpenCV 库。
1.6、程序测试
进入下载好的opencv里的:~/opencv/opencv-4.2.0$ cd samples/cpp/example_cmake/(这是我的目录)
cd ~/opencv-4.1.2/samples/cpp/example_cmake
cmake .
make
./opencv_example
也可以自己写程序测试,新建一个test_opencv.cpp
读取图片
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("lena.jpg");
imshow("src",srcImage);
waitKey(0);
return 0;
}
读取摄像头
/*****************************************************
2021.5.7: test_opencv.cpp
******************************************************/
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <fstream>
using namespace cv;
using namespace std;
#define SRC_WIDTH 1920
#define SRC_HEIGHT 1080
int main()
{
//测试视频
VideoCapture capture;
capture.open(0);
if (!capture.isOpened())
{
printf("camera 打开失败\n");
}
else
{
printf("camera 打开 ok\n");
}
Mat frame;
while (true)
{
capture >> frame;
if (frame.data == NULL)
{
printf("Image is empty\n");
break;
}
namedWindow("111", 0);//参数为零,则可以自由拖动
imshow("111", frame);
waitKey(2);
}
return 0;
}
编译运行,后面记住要加 `pkg-config opencv4 --cflags --libs`
g++ -o test_opencv test_opencv.cpp `pkg-config opencv4 --cflags --libs`
./test_opencv
2. _src.type() == CV_8UC1 in function 'cv::equalizeHist'
原因:这个错误通常出现在使用cv2.equalizeHist()函数时,输入图像类型不正确。cv2.equalizeHist()函数只能处理8位单通道图像(即CV_8UC1类型)。
解决方法:将输入图像转换为8位单通道图像,可以使用cv2.cvtColor()函数将彩色图像转换为灰度图像,然后使用cv2.equalizeHist()函数进行直方图均衡化。
Mat infrared_img = imread("infrared.jpg");
Mat grayInfrared;
cvtColor(infrared_img, grayInfrared, COLOR_BGR2GRAY);
Mat infrared_img_1,rgb_img_1;
equalizeHist(grayInfrared,infrared_img_1); //直方图均衡
参考:_src.type() == CV_8UC1 in function 'cv::equalizeHist' - CSDN文库
3.Opencv 解决问题 !_src.empty() in function 'cv::cvtColor'
!_img.empty() in function 'imwrite'和size.width>0 && size.height>0 in function 'imshow'
得详细检查一下路径有没有问题,文件名有没有错,
参考:https://blog.csdn.net/hy_z_/article/details/103681088
4. The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'arithm_op'
出现这种情况的原因:
第一种:尺寸大小不一样
解决方法:裁剪图片
参考:【已解决】OpenCV Error: Sizes of input arguments do not match-CSDN博客
opencv图像混合报错问题_the operation is neither 'array op array' (where a-CSDN博客
第二种:出现原因,可能是读取照片时,选择了不同的读取图像方式
string left_file = "./infrared.jpg";
Mat infrared_img = imread(left_file,0);
Mat rgb_img = imread("rgb.jpg",1);
Mat blended_img;
addWeighted(rgb_img, 0.6, infrared_img, 0.4, 0.0, blended_img);
只要把读取方式改为同一种方式就可以了,熟悉imread函数参考:opencv学习——imread()读取图像-CSDN博客