OpenCV 图片读取错误: imread() 返回空指针

在使用 OpenCV 的 imread() 函数读取图片时,如果返回空指针,通常表示图片读取失败。这可能是由于以下几种原因造成的:

1. 图片路径填写错误

最常见的错误就是图片路径填写错误,例如路径中包含空格或特殊字符,或者路径指向错误的目录。请仔细检查图片路径,确保路径正确且指向有效的图片文件。

2. 图片不存在

如果图片文件不存在,imread() 函数也会返回空指针。请确保图片文件存在于指定的路径中。

3. 图片权限问题

如果程序没有读取图片文件的权限,imread() 函数也会返回空指针。请检查图片文件的权限,确保程序拥有读取权限。

4. 图片被占用

如果图片文件被其他程序占用,imread() 函数也可能无法读取成功。请确保图片文件没有被其他程序占用。

解决方案

解决 imread() 返回空指针问题的方法如下:

  • 检查图片路径,确保路径正确且指向有效的图片文件。
  • 确保图片文件存在于指定的路径中。
  • 检查图片文件的权限,确保程序拥有读取权限。
  • 确保图片文件没有被其他程序占用。

如果以上方法都无法解决问题,请尝试使用绝对路径来代替相对路径,并检查图片文件的编码格式。

代码示例


#include <opencv2/opencv.hpp>
#include <vector>
#include <cmath>
#include <numeric>
#include <string>
#include <iostream>
#include <ostream>
using namespace cv;
using namespace std;

void getDarts(const string& pic1_ad, const string& pic2_ad) { Mat pic1 = imread(pic1_ad, IMREAD_COLOR), pic2 = imread(pic2_ad, IMREAD_COLOR); if (pic1.empty()) cout << "打开失败" << endl; else { Mat pic1_HSI, pic2_HSI;

	cvtColor(pic1, pic1_HSI, COLOR_BGR2HSV);
	cvtColor(pic2, pic2_HSI, COLOR_BGR2HSV);

	Mat result;

	int Width = pic1.cols, Height = pic1.rows;

	for (int i = 0; i &lt; Height; i++)
		for (int j = 0; j &lt; Width; j++)
		{
			Vec3b HSIpixels1 = pic1.at&lt;Vec3b&gt;(i, j); // 获取坐标为(j,i)的像素,即(x,y)

			cout &lt;&lt; HSIpixels1[0] &lt;&lt; endl;
			cout &lt;&lt; HSIpixels1[1] &lt;&lt; endl;
			cout &lt;&lt; HSIpixels1[2] &lt;&lt; endl;

			break;
		}

}

}

int main() { string pic1_ad = "F:\Brochure\1.JPG"; Mat img = imread("1.JPG");

imshow("1.JPG", img);

string pic2_ad = "F:\\Brochure\\2.JPG";
//getDarts(pic1_ad, pic2_ad);

return 0;

}


原文地址: https://www.cveoy.top/t/topic/pxlb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录