如果在这里遇到一个非常奇怪的问题。我正在使用Visual Studio 10和OpenCV进行开发 在下面的代码段中,我正在创建一个1通道Mat并写入两个不同的Mats。 第一个窗口“test1”显示黑色图片。那是对的。
“test2”窗口仍显示黑色图片。还是正确的。
然后最后一个窗口“test3”显示与inRange命令之后存储在bwHSVred中相同的图片。 为什么bwHSVblue会在此inRange操作期间发生变化?
有人知道为什么吗?这对我来说没有任何意义。
frame = imread(pathtopicture);
cvtColor(frame, calHSV, COLOR_BGR2HSV);
inRange(calibHSV, Scalar(255, 255, 255), Scalar(0, 0, 0), bwAll);
bwHSVred = bwAll;
bwHSVblue = bwAll;
imshow("test1",bwHSVblue);
//load red
//set the x_MIN,x_MAX values to Hmin=0,Smin=119,Vmin=108,Hmax=218,Smax=234,Vmax=168
setHSVval(redCube);
updateTrackbars();
currentColor = RED;
imshow("test2",bwHSVblue);
inRange(calibHSV, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), bwHSVred);
imshow("test3",bwHSVblue);
.h文件中Mat对象的定义
private:
Mat calHSV;
Mat bwAll;
Mat bwHSVred;
Mat bwHSVblue;
答案 0 :(得分:1)
问题在于你的C / C ++指针用法。
所有三个矩阵都是同一个实例:
bwHSVred = bwAll;
bwHSVblue = bwAll;
您正在复制指针,这意味着它们现在都指向相同的矩阵。
如果您想复制矩阵,请使用clone
或copyTo
as explained in the docs:
Mat F = A.clone();
Mat G;
A.copyTo(G);
答案 1 :(得分:0)
Mat a = b;只做一个浅拷贝(都指向相同的数据)
这就是为什么bwHSVred == bwHSVblue == bwAll