如何在cv::Mat不改变其他通道的情况下有效地将a的给定通道设置为给定值?例如,我想将其第四个通道(alpha通道)值设置为120(即半透明),如:
cv::Mat mat; // with type CV_BGRA
...
mat.getChannel(3) = Scalar(120); // <- this is what I want to do
Run Code Online (Sandbox Code Playgroud)
PS:我当前的解决方案首先分成mat多个通道并设置alpha通道,然后将它们合并.
PS2:我知道如果我也想通过以下方式更改其他频道,我可以快速完成此操作:
mat.setTo(Scalar(54, 154, 65, 120));
Run Code Online (Sandbox Code Playgroud)
这两种方法都可以将给定通道的所有mat值设置为给定值.它们将适用于所有矩阵,无论它们是否连续.
- >基于@Antonio的答案,并由@MichaelBurdinov进一步改进
// set all mat values at given channel to given value
void setChannel(Mat &mat, unsigned int channel, unsigned char value)
{
// make sure have enough channels
if (mat.channels() < channel + 1)
return;
const int cols = mat.cols;
const int …Run Code Online (Sandbox Code Playgroud)