OpenCV 读取图像文件异常:访问冲突错误解决方法

在使用 OpenCV 处理图像时,经常会遇到读取图像文件失败并抛出访问冲突异常(0xC0000005)的错误。这通常是由于访问了空指针或者无效的内存地址导致的。以下是一些常见的原因和解决方案:

1. 文件路径错误

  • 确保图像文件路径是正确的,包括大小写和路径分隔符(Windows 使用 '',Linux 使用 '/')。
  • 使用绝对路径来访问图像文件,避免相对路径引起的路径错误。

2. 图像文件不存在

  • 确保图像文件确实存在于指定的路径下。可以尝试手动打开图像文件来验证。
  • 检查文件名是否拼写错误。

3. 权限不足

  • 确保你的代码具有读取图像文件的权限。
  • 尝试将图像文件放在一个你有权限访问的位置,例如当前目录或系统目录。

示例代码:

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

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()
{
	setLogLevel(utils::logging::LOG_LEVEL_ERROR);

	string pic1_ad = "D://微搜死丢丢//Darts//1.JPG";
	string pic2_ad = "D://微搜死丢丢//Darts//2.JPG";

	Mat img = imread(pic2_ad);

	if (img.empty())
	{
		cout << "无法读取图像" << endl;
		return -1;
	}
	else
	{
		cout << img.rows << " " << img.cols << endl;

		namedWindow('2.JPG', WINDOW_NORMAL);
		
		imshow('2.JGP', img);

		destroyWindow('2.JPG');
		return 1;
	}
		
	//getDarts(pic1_ad, pic2_ad);

	return 0;
}

调试技巧:

  • 使用调试器(例如 Visual Studio 调试器)单步执行代码,查看变量值,定位问题代码段。
  • 打印关键变量值,例如文件路径、图像大小,帮助排查问题。

总结:

通过仔细检查文件路径、文件存在性和权限问题,以及使用调试技巧,你应该能够解决 OpenCV 读取图像文件时发生的访问冲突错误。

OpenCV 图像处理: 读取图像文件异常 - 访问冲突错误解决方法

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

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