簡體   English   中英

使用 openCV Mat c++ 加載圖像

[英]load image with openCV Mat c++

我想在 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() imshow()

編輯

如果是cv::imread()拋出異常,我知道唯一可行的解​​決方案是下載 OpenCV 源代碼並在機器上構建它,因為重新安裝 OpenCV 並不能解決問題。

你有沒有檢查過我在 imread 之后存在? 也許文件讀取失敗

讀取文件后執行if ( I.empty() )檢查是否失敗

我不知道你為什么沒有包含問題,因為通常它是 .hpp 文件,所以你應該這樣做

#include <opencv2/highgui/highgui.hpp>
#include <opencv2\core\eigen.hpp>

但是你的代碼看起來不錯,但添加了一個cv::waitKey(0); 在你的 imshow 之后。

您是否使用 Visual Studio 2010 來運行 OpenCV 代碼? 如果是這樣,請嘗試在 Release 模式下編譯。

正如@karlphillip 所指出的,無論聽起來多么微不足道,但這句話“傳遞文件名時需要轉義反斜杠:C:\\images\\apple.jpg”非常重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM