3

如果我有一个 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]
4

1 回答 1

5

它在 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]
于 2013-08-28T16:00:36.897 回答