如果我有一个 OpenCV cv::Mat,并且我有一列整数:
[1;2;3;1;2;3;1;2;3]
如何按值(即 1)选择一系列索引,将这些索引设置为不同的值(即 0),并保持其余值不变?
如果这是 MATLAB,我可以很容易地做到:
A = [1;2;3;1;2;3;1;2;3];
A(A==1) = 0;
导致:
[0;2;3;0;2;3;0;2;3]
它在 OpenCV 中不像在 MATLAB 中那样简洁,但很接近。setTo()
功能就是你想要的。这利用了这样一个事实cv::Mat
,例如==
和上的一些逻辑操作!=
会产生可以传递给其他函数的掩码:
uchar data[] = {1, 2, 3, 1, 2, 3, 1, 2, 3};
cv::Mat A(9, 1, CV_8UC1, data);
A.setTo(0, A == 1);
这将给出预期的结果:
[0; 2; 3; 0; 2; 3; 0; 2; 3]