问题描述
我正在尝试将 Sobel 过滤器应用到我的垫子上,该垫子具有来自外部来源的数据。简化后的代码如下所示:
// Create Mats
cv::Mat src = cv::Mat( cv::Size( ACQ_WIDTH,ACQ_HEIGHT ),CV_8U );
cv::Mat dx;
// Point Mat to buffer data
src.data = (uchar*)(bufObject->address);
// Calculate x-gradient
cv::Sobel( src,dx,CV_16U,1,CV_SCHARR,BORDER_REPLICATE ) ;
OpenCV Error: Assertion Failed (roi.x >= 0 && roi.y >= 0 && roi.width >= 0 && roi.height >= 0 && roi.x + roi.width <= wholeSize.width && roi.y + roi.height <= wholeSize.height) in start,file /home/nvidia/Desktop/opencv-3.3.1/modules/imgproc/src/filter.cpp,line 173
terminate called after throwing an instance of 'cv::Exception'
what(): /home/nvidia/Desktop/opencv-3.3.1/modules/imgproc/src/filter.cpp:173: error: (-215) roi.x >= 0 && roi.y >= 0 && roi.width >= 0 && roi.height >= 0 && roi.x + roi.width <= wholeSize.width && roi.y + roi.height <= wholeSize.height in function start
非常奇怪(至少在我看来),当我克隆相同的矩阵并将过滤器应用于克隆时,一切都很好!
// Create Mats
cv::Mat src = cv::Mat( cv::Size( ACQ_WIDTH,CV_8U );
cv::Mat dx;
// Point Mat to buffer data
src.data = (uchar*)(bufObject->address);
// Create clone
cv::Mat cl = src.clone() ;
// Calculate x-gradient
cv::Sobel( cl,BORDER_REPLICATE ) ;
数据源没问题:imshow(src) 和 imshow (fm) 都正确显示了缓冲区,并且如前所述,如果使用克隆而不是原始图像,一切正常。
由于这是一个时间敏感的应用程序并且这是一个视频帧循环,我不想在每一步都克隆源。我错过了什么?
更新:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)