加载图像与openCV Mat c++

load image with openCV Mat c++

本文关键字:Mat c++ openCV 图像 加载      更新时间:2023-10-16

我想在openCV中使用Mat加载图像

我的代码是:
Mat I = imread("C:/images/apple.jpg", 0);
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", I ); 

我在消息框中得到以下错误:

Unhandled exception at 0x70270149 in matching.exe: 0xC0000005: Access violation 
reading location 0xcccccccc.

请注意,我包括:

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <math.h>

我之前已经讨论过很多次了,我想再做一次是没有意义的,但是代码是防御性的:如果方法/函数调用可能失败,请确保您知道它何时发生:

Mat I = imread("C:\images\apple.jpg", 0);
if (I.empty())
{
    std::cout << "!!! Failed imread(): image not found" << std::endl;
    // don't let the execution continue, else imshow() will crash.
}
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", I ); 
waitKey(0);

请注意,Windows的路径使用反斜杠而不是*nix系统上使用的标准/。传递文件名时需要转义反斜杠:C:\images\apple.jpg

如果使用imshow(),则必须调用waitKey()

编辑:

如果是cv::imread()抛出异常,我所知道的唯一解决方案是下载OpenCV源代码并在机器上构建它,因为重新安装OpenCV并不能解决这个问题。

我不知道你为什么没有include问题因为通常是。hpp文件所以你应该输入

#include <opencv2/highgui/highgui.hpp>
#include <opencv2coreeigen.hpp>

但是你的代码看起来不错,但是在你的imshow之后添加一个cv::waitKey(0);

您是否检查过imread后是否存在I ?可能文件读取失败

读取文件后执行if ( I.empty() )检查是否失败

您是否使用visual studio 2010来运行OpenCV代码?如果是,尝试在发布模式下编译。

正如@karlphillip所指出的,无论这听起来多么琐碎,但这句话"在传递文件名:C:imagesapple.jpg时,您需要转义反斜杠"确实很重要。