簡體   English   中英

OpenCV 錯誤:斷言失敗 (size.width>0 && size.height>0) 簡單代碼

[英]OpenCV Error: Assertion failed (size.width>0 && size.height>0) simple code

我正在嘗試運行這個簡單的 OpenCV 程序,但出現此錯誤:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file .../opencv/modules/highgui/src/window.cpp, line 276

代碼:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    cv::Mat inputImage = cv::imread("/home/beniz1.jpg");
    cv::imshow("Display Image", inputImage);

    return 0;
}

這個錯誤的原因是什么?

此錯誤意味着您正在嘗試顯示空圖像。 當您使用imshow加載圖像時,這通常是由以下原因引起的:

  1. 您的圖像路徑錯誤(在 Windows 中轉義兩次目錄分隔符,例如imread("C:\\path\\to\\image.png")應該是: imread("C:\\\\path\\\\to\\\\image.png")imread("C:/path/to/image.png") );
  2. 圖片擴展名錯誤。 (例如“.jpg”不同於“.jpeg”);
  3. 您無權訪問該文件夾。

排除其他問題的一個簡單解決方法是將圖像放在項目目錄中,然后簡單地傳遞給imread文件名( imread("image.png") )。

記得添加waitKey(); ,否則你什么也看不到。

您可以檢查圖像是否已正確加載,例如:

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");

    if (!img.data)
    {
        std::cout << "Image not loaded";
        return -1;
    }

    imshow("img", img);
    waitKey();
    return 0;
}

通常這意味着您的圖像不存在,這是在實際顯示之前檢查內容是否可在窗口中顯示的基本斷言,順便說一句,您需要創建一個窗口以顯示該圖像 namedWindow("name" ) 然后 imshow ("name", image);

我有完全相同的問題,只有在 Raspbian 中。 經過數小時的嘗試,解決方案非常簡單,我不得不省略文件擴展名。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;
int main()
{
    Mat inputImage = imread("beniz1");
    imshow("Display Image", inputImage);
    waitKey(5000);

    return 0;
}

當我在 Ubuntu 中使用 Qt Creator 時,我也遇到了同樣的錯誤。 圖像在項目文件夾中,所以我認為沒有必要提供完整路徑。

img = imread("baboon.png");

我得到的錯誤是:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-36Gs_O/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp, line 304
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-36Gs_O/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp:304: error: (-215) size.width>0 && size.height>0 in function imshow

通過提供完整路徑解決了錯誤:

img = imread("home/vivek/QT_ImageProcessing/IP_HomeWork1/baboon.png");

仔細檢查您的圖像路徑

最有可能的是,您沒有使用正確的圖像路徑或其格式。 如果您使用的是 Windows: img =cv2.imread("C:/Users/mohin/Pictures/IMG_4514.jpg")

只需將您的圖像添加到您的項目目錄文件夾中。

如何:

1-在默認位於左側的搜索解決方案資源管理器中右鍵單擊您的項目名稱。

2-單擊文件資源管理器中的打開文件夾

3-將您的圖像粘貼到該文件夾​​中

然后

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;
int main()
{
    //change "beniz1" to "beniz1.jpg"

    Mat inputImage = imread("beniz1.jpg"); 
    imshow("Display Image", inputImage);
    waitKey(5000);

    return 0;
}

暫無
暫無

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

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