OpenCV 图片读取错误: imread() 返回空指针
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 < Height; i++)
for (int j = 0; j < Width; j++)
{
Vec3b HSIpixels1 = pic1.at<Vec3b>(i, j); // 获取坐标为(j,i)的像素,即(x,y)
cout << HSIpixels1[0] << endl;
cout << HSIpixels1[1] << endl;
cout << HSIpixels1[2] << 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 著作权归作者所有。请勿转载和采集!