简单记录一下ubantu18.04安装opencv4.2.0和使用opencv所遇到的问题

目录

1.ubantu18.04安装opencv及opencv_contrib

1.1安装依赖库:

1.2 、解压目录创建build目录

1.3、 cmake指令

1.4、配置opencv环境

1.5、 查看版本

 1.6、程序测试

2. _src.type() == CV_8UC1 in function 'cv::equalizeHist'

3.Opencv 解决问题 !_src.empty() in function 'cv::cvtColor' 

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' 


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

error: (-215:Assertion failed) !_img.empty() in function ‘cv::imwrite‘已解决_error: (-215:assertion failed) !image.empty() in f-CSDN博客

解决OpenCV error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'-CSDN博客

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博客

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值