c++ - 如何在 OpenCV 中调用 cv::updateMotionHistory()

标签 c++ opencv

我正在将 samples/c/motempl.c 更新到 OCV 2.3,我对 cv::updateMotionHistory() 方法有点困惑。我按照我在 motempl.c 中看到的内容创建历史记录:

    history = cv::Mat::zeros(640, 480, CV_32FC1);

然后,我像这样调用 updateMotionHistory():

cv::Mat diff = cv::Mat::zeros(640, 480, CV_8U);

if(prevFrame.size().width != 0) {
   cv::absdiff(currentFrame, prevFrame, diff);
} else {
   return;
}

cv::updateMotionHistory( diff, history, getElapsedSeconds(), MHI_DURATION);

看起来没问题,但它总是抛出以下内容:

OpenCV Error: Sizes of input arguments do not match () in cvUpdateMotionHistory

两个矩阵的大小相同,640、480,但为了好玩,我尝试将历史记录更改为 CV_8U,这让我明白了:

OpenCV Error: Unsupported format or combination of formats () in cvUpdateMotionHistory

在样本之后,有这个:

 mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 );

我明白为什么历史需要是 float 图像,我只是不确定如何使用矩阵而不是 IplImage 实例调用此方法。谢谢!

最佳答案

好的,所以我想通了,就在将其设为赏金之后,我想我应该发布答案,但不确定这样做的礼节是什么。历史需要为 CV_32FC1:

history = cv::Mat::zeros(480, 640, CV_32FC1);

初始化 Mat 的行/列也有点不直观:

cv::Mat diff = cv::Mat::zeros(480, 640, CV_8UC1); // not 640,480

然后:

cv::updateMotionHistory( diff, history, getElapsedSeconds(), MHI_DURATION);

关于c++ - 如何在 OpenCV 中调用 cv::updateMotionHistory(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815712/

相关文章:

c++ - header 包含顺序困惑

c++ - OpenCV 鼠标事件在鼠标滚动时总是接收事件 10 和 *flag* 0?

初始化对象时c++编译错误

matlab - 将 Matlab 与 C++ 集成

c++ - 如何正确使用 cv::triangulatePoints()

opencv - opencv_createsamples “Assertion Failed”错误

opencv - 使用 canny 和 hough 变换检测图像是否像素化

c++ - 构造函数的快捷方式

c++ - opencv - 对函数 "FindHomography"和 "cvFindHomography"的混淆

c++ - 推荐内存占用较小的快速 C++ UI 库