gpt4 book ai didi

c++ - 无关垫在 inRange 期间被无法解释的覆盖

转载 作者:行者123 更新时间:2023-11-28 07:14:57 25 4
gpt4 key购买 nike

如果这里遇到一个很奇怪的问题。我正在使用 Visual Studio 10 和 OpenCV 进行开发在下面的代码段中,我正在创建一个 1 channel 垫并写入两个不同的垫。第一个窗口“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;

最佳答案

问题出在您的 C/C++ 指针使用上。

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

bwHSVred = bwAll;
bwHSVblue = bwAll;

您正在复制指针,这意味着它们现在都指向同一个矩阵。

如果要复制矩阵,应使用clonecopyTo as explained in the docs :

Mat F = A.clone();
Mat G;
A.copyTo(G);

关于c++ - 无关垫在 inRange 期间被无法解释的覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com