c++ - 如何修复 OpenCV 断言失败错误?
问题描述
当我尝试在 Visual Studio 中运行以下代码时,我收到一条错误消息:
TestOpenCV.exe 中 0x00007FFC976DA839 处的未处理异常:Microsoft C++ 异常:内存位置 0x0000003DAEEFF360 处的 cv::Exception。
命令窗口显示此消息:
OpenCV(4.1.0-dev) 错误: cv::imshow 中的断言失败 (size.width>0 && size.height>0),文件 C:\Users\hordon\opencv\modules\highgui\src\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);
}
解决方案
在进一步处理之前检查图像是否被正确读取
image = cv::imread(".\\csillam.jpg");
if (!image.data) // image was not created
{
exit(1);
}
推荐阅读
- php - 不逃避我在 sql 中的输入是否安全
- java - 仅在运行 Spring 项目时获取“不支持的 major.minor 版本 52.0 异常”
- python - Apache + mod_wsgi + 烧瓶应用程序:日志中出现“无法获取请求的桶旅”错误
- c - openssl Elliptic_Curve_Cryptography - 定义“自定义”曲线
- laravel - 无法让 Laravel Mail::to()->later() 工作
- c# - 在 .NET 中将“原始”请求转换为 JSON(Rest 服务)
- bash - VS Code:使用 WSL/Bash 运行任务
- angular - 三态复选框的支持字段被(重新)评估得太频繁
- date - 如何在 Elastic Search 中对日期属性进行全文查询
- c - 如何在C中清空字符串的静态数组