如何修复OpenCV断言失败错误?

时间:2019-06-19 15:07:57

标签: c++ opencv

当我尝试在Visual Studio中运行以下代码时,出现错误消息:

TestOpenCV.exe中0x00007FFC976DA839的未处理异常:Microsoft C ++异常:内存位置0x0000003DAEEFF360的cv :: Exception。

命令窗口显示以下消息:

OpenCV(4.1.0-dev)错误:在cv :: imshow文件C:\ Users \ hordon \ opencv \ modules \ highgui \ src \中断言失败(size.width> 0 && size.height> 0) window.cpp,第352行

我不知道出什么问题了。我最好的猜测是,我在带有Parallels Desktop的Mac上使用了虚拟Windows 10,并且路径出了问题。但这很奇怪,因为我将映像直接复制到EXE旁边。知道如何解决这个问题吗?

#include "pch.h"
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

cv::Mat image;

void myMouseCallback(int event, int x, int y, int flags, void* userdata)
{
    if (flags & cv::MouseEventFlags::EVENT_FLAG_LBUTTON) {
        if (flags & cv::MouseEventFlags::EVENT_FLAG_SHIFTKEY) {
            cv::rectangle(image, { x,y }, { y, x }, CV_RGB(255, (x*y) % 255, (x + y) % 255));
        } else if (flags &cv::MouseEventFlags::EVENT_FLAG_ALTKEY) {
            cv::line(image, { x, y }, { y, x }, CV_RGB((y * x) % 255, (int)(sin((double)x / image.cols) * 255), (x * y * x - y) % 255));
        } else {
            cv::circle(image, { x,y }, (x + y) % 10, 0);
        }
    }

    cv::imshow("Ablak", image);
}

int main()
{
    image = cv::imread(".\\csillam.jpg");

    cv::Mat greyScale(image.rows, image.cols, CV_8UC1);
    for (int i = 0; i < greyScale.rows; ++i) {
        for (int j = 0; j < greyScale.cols; j++) {
            cv::Vec3b pixel = image.at<cv::Vec3b>(i, j);

            greyScale.at<uint8_t>(i, j) = (pixel[0] + pixel[1] + pixel[2]) / 3;
        }
    }
    cv::imshow("Greyscale", greyScale);

    cv::imshow("Ablak", image);
    cv::setMouseCallback("Ablak", myMouseCallback);

    cv::waitKey(0);
}

2 个答案:

答案 0 :(得分:0)

在进一步处理之前检查图像是否正确读取

image = cv::imread(".\\csillam.jpg");
if (!image.data)    // image was not created 
{
    exit(1);
}

答案 1 :(得分:0)

  

但这很奇怪,因为我直接将映像复制到EXE旁边

默认情况下,Visual Studio将在其他位置设置工作目录。 You can find your current working directorychange it