使用数据初始化cv :: Mat不起作用

时间:2016-05-29 21:49:58

标签: c++ opencv

关注this example我尝试使用以下值初始化openCV Mat

cv::Mat image = (cv::Mat_<int>(3,3) << 0, 255, 0, 0, 255, 0, 0, 255, 0);

但是,我的IDE抱怨

Binary operator '<<' can't be applied to the expressions of type 'cv::Mat_<int>' and 'int'

编译时我得到了

OpenCV Error: The function/feature is not implemented (Unsupported combination of source format (=4), and buffer format (=5)) in getLinearRowFilter, file /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/filter.cpp, line 2857
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/filter.cpp:2857: error: (-213) Unsupported combination of source format (=4), and buffer format (=5) in function getLinearRowFilter

我现在使用openCV for Python已经有一段时间了,但我完全迷失了用C ++。

1 个答案:

答案 0 :(得分:1)

您可能正在尝试应用使用getLinearRowFilter()的函数(或过滤器)(例如Sobel和其他)并且您正在使用非类型(输入和输出)的组合允许的。

您可以查看允许的组合here,其中sdepth是来源的深度(input),ddepth是目的地的深度({{1} }}):

output

根据错误,您可能正在使用// these are allowed, otherwise the error will be thrown if( sdepth == CV_8U && ddepth == CV_32S ) if( sdepth == CV_8U && ddepth == CV_32F ) if( sdepth == CV_8U && ddepth == CV_64F ) if( sdepth == CV_16U && ddepth == CV_32F ) if( sdepth == CV_16U && ddepth == CV_64F ) if( sdepth == CV_16S && ddepth == CV_32F ) if( sdepth == CV_16S && ddepth == CV_64F ) if( sdepth == CV_32F && ddepth == CV_32F ) if( sdepth == CV_32F && ddepth == CV_64F ) if( sdepth == CV_64F && ddepth == CV_64F ) =4)输入和CV_32S=5)输出。基本上,您不能在使用CV_32F的函数中使用CV_32SMat_<int>)作为输入。

要解决此问题,您可以在使用之前转换输入。例如:

getLinearRowFilter()

注意:信息不准确,因为并非所有相关代码都在问题中。