如何索引和修改OpenCV矩阵

tri*_*ta2 3 c++ opencv

如果我有一个OpenCV cv :: Mat,我有一个整数列:

[1;2;3;1;2;3;1;2;3]
Run Code Online (Sandbox Code Playgroud)

如何按值(即1)选择一系列指数,将这些指数设置为不同的值(即0),并保持其余值不变?

如果这是MATLAB,我可以很容易地做到:

A = [1;2;3;1;2;3;1;2;3];
A(A==1) = 0;
Run Code Online (Sandbox Code Playgroud)

导致:

[0;2;3;0;2;3;0;2;3]
Run Code Online (Sandbox Code Playgroud)

Aur*_*ius 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);
Run Code Online (Sandbox Code Playgroud)

哪个会给出预期的结果:

[0; 2; 3; 0; 2; 3; 0; 2; 3]
Run Code Online (Sandbox Code Playgroud)