opencv cvtColor set / get matrix element

时间:2015-03-25 21:08:20

标签: c++ opencv

cv::cvtColor(dst,bwImage, CV_RGB2GRAY);

我怎样才能设置一个特定的像素,比如0,0将这个bwImage赋值为cvtColor之后?

我通常使用:

bwImage.at<float>(0,0) = 0;

但它现在抛出异常。

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file C:\Users\gdarmon\Downloads
\opencv\build\include\opencv2/core/mat.hpp, line 538

更新我找到了一个解决方法

bwImage.convertTo(bwImage,CV_32F);
bwImage.at<float>(0,0)=0;

1 个答案:

答案 0 :(得分:3)

正如您已经发现的那样,您的黑白图像不会保留浮点数,而是8位无符号整数。除了你的解决方法,你也可以做

bwImage.at<uint8_t>(0,0) = 0;

如果你包含stdint.h。由于这只是unsigned char的typedef,因此您也可以不包含标题并执行此操作:

bwImage.at<unsigned char>(0,0) = 0;

注意:OpenCV的默认频道顺序是BGR,因此如果您没有事先对频道重新排序,那么在这里使用CV_RGB2GRAY会出错。