【问题标题】:OpenCV C++ absdiff() unhandled exceptionOpenCV C++ absdiff() 未处理异常
【发布时间】:2021-12-02 10:59:47
【问题描述】:

我尝试使用absdiff() 查找静止图像和从我的网络摄像头拍摄的帧之间的帧差异。我的代码如下:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/objdetect.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main() {
    VideoCapture webcam(0);
    Mat img, web, diff;
    
    webcam >> web;
    img = imread("/Users/dnxv2/Desktop/test.jpg");

    cvtColor(web, web, COLOR_BGR2GRAY);
    cvtColor(img, img, COLOR_BGR2GRAY);

    absdiff(img, web, diff);
    
    imshow("test", diff);
    waitKey(0);
}

运行时遇到错误,无法解决。

test.exe 中 0x00007FF937E24F99 处未处理的异常:Microsoft C++ 异常:内存位置 0x000000FA29CFE1B0 处的 cv::Exception。

我错过了什么吗?非常感谢您的帮助!

【问题讨论】:

  • 你怎么知道absdiff是源?请在使用前测试 web 和 img。其中一个可能是空的。
  • 啊我终于知道我的程序为什么会报错了,谢谢你的帮助! :D p/s 分辨率问题。

标签: c++ visual-studio opencv


【解决方案1】:

我想出了解决这个问题的方法。总而言之,这只是一个小分辨率问题,可以通过img的分辨率与web匹配来解决。

如果有人感兴趣,这里有两行代码似乎可以解决问题:D

int resx = 500, resy = 500; // 500x400 resolution
resize(img, img, { resx, resy }, 0, 0, cv::INTER_NEAREST);
resize(web, web, { resx, resy }, 0, 0, cv::INTER_NEAREST); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2012-06-12
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多