c++ 尝试使用imread()和imshow()会引发OpenCV错误:Assert失败(大小.宽度>0且大小.高度>0)

yzckvree  于 2022-12-24  发布在  其他
关注(0)|答案(7)|浏览(300)

我试图运行这个简单的OpenCV程序,但我得到了这个错误:
第一个月
代码:

#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;
}

此错误的原因是什么?

yc0p9oo0

yc0p9oo01#

此错误意味着您试图显示空图像。当您使用imshow加载图像时,这通常是由以下原因导致的:
1.映像的路径错误(在Windows中转义两次目录分隔符,例如imread("C:\path\to\image.png")应该是:imread("C:\\path\\to\\image.png"),或imread("C:/path/to/image.png"));
1.图像扩展名错误(例如.jpg与.jpeg不同);
1.您没有访问该文件夹的权限。
排除其他问题的一个简单的解决方法是将图像放在项目目录中,然后简单地将文件名(imread("image.png"))传递给imread
记住添加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;
}
jq6vz3qz

jq6vz3qz2#

通常这意味着你的图像不在那里,这是一个基本的Assert,用于在实际显示之前检查内容是否可以在窗口中显示,顺便说一下,你需要创建一个窗口,以便显示名为Window(“name”)然后imshow(“name”,image)的图像;

y0u0uwnf

y0u0uwnf3#

我遇到了完全相同的问题,只是在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;
}
scyqe7ek

scyqe7ek4#

我在Ubuntu中使用Qt Creator时也遇到了同样的错误,图片在项目文件夹中,所以我认为没有必要给予完整的路径。
第一个月
我得到的错误是:

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");

vm0i2vca

vm0i2vca5#

仔细检查你的路径到一个图像

gcmastyq

gcmastyq6#

最有可能的是,您没有使用正确的路径到您的图像或它的格式.如果您使用的是windows:img =cv2.imread(“C:/用户/动画/图片/IMG_4514.jpg”)

eiee3dmh

eiee3dmh7#

只需将图像添加到项目目录文件夹中。
方法:
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;
}

相关问题