C++ 未涉及的Mat在inRange期间被无法解释的覆盖

C++ 未涉及的Mat在inRange期间被无法解释的覆盖,c++,opencv,C++,Opencv,如果这里有一个非常奇怪的问题。我正在使用VisualStudio10和OpenCV进行开发 在下面的代码段中,我将创建一个单通道Mat并写入两个不同的Mat。 第一个窗口“test1”显示黑色图片。没错 “test2”窗口仍然显示黑色图片。仍然正确 然后,最后一个窗口“test3”显示inRange命令后存储在bwHSVred中的相同图片。 为什么在此inRange操作期间bwHSVblue会发生变化 有人知道为什么吗?这对我来说毫无意义 frame = imread(pathtopicture

如果这里有一个非常奇怪的问题。我正在使用VisualStudio10和OpenCV进行开发 在下面的代码段中,我将创建一个单通道Mat并写入两个不同的Mat。 第一个窗口“test1”显示黑色图片。没错

“test2”窗口仍然显示黑色图片。仍然正确

然后,最后一个窗口“test3”显示inRange命令后存储在bwHSVred中的相同图片。 为什么在此inRange操作期间bwHSVblue会发生变化

有人知道为什么吗?这对我来说毫无意义

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;

问题在于C/C++对指针的使用

所有三个矩阵都是相同的实例:

bwHSVred = bwAll;
bwHSVblue = bwAll;
您正在复制指针,这意味着它们现在都指向同一个矩阵

如果要复制矩阵,应使用
clone
copyTo


材料a=b;仅进行浅层复制(两者都指向相同的数据)


这就是为什么bwHSVred==bwHSVblue==bwAll

非常感谢。听起来很合理。我有这个想法,但我没有认真对待。我仍然需要学习C++的细节:谢谢你,请不要在你的题目中加上“解决”。如果其中一个答案帮助您解决了问题,请单击左侧空白处的复选标记。如果没有一个答案是有用的,而你找到了自己的解决方案,那么就发布你自己的答案并接受它。
Mat F = A.clone();
Mat G;
A.copyTo(G);