这个功能在实际工程开发很重要很必要,废话不多说,上代码。
#include<opencv2\opencv.hpp>
int main()
{
cv::Mat img = cv::imread("Lena.jpg");
cv::Mat img_backup = img.clone();
//如果是单通道,转为三通道
if (1 == img.channels())
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
/**
核心:
* *(img.data + img.step[0] * i + img.step[1] * j + img.elemSize1() * c)=new_val
* 这行代码是解析出来image的第i行第j列(即坐标为[j,i])第c通道,然后就可以对它进行赋值了。
*/
for (int i = 0; i < img.rows; ++i)
for (int j = 0; j < img.cols; ++j)
{
//对第0个通道进行赋值操作,也就是blue通道
*(img.data + img.step[0] * i + img.step[1] * j + img.elemSize1() * 0) = 255;
//对第2个通道进行赋值操作,也就是green通道
*(img.data + img.step[0] * i + img.step[1] * j + img.elemSize1() * 1) = 0;
//对第3个通道进行赋值操作,也就是red通道
*(img.data + img.step[0] * i + img.step[1] * j + img.elemSize1() * 2) = 0;
}
cv::imshow("img_src", img_backup);
cv::imshow("img_rst", img);
cv::waitKey();
}
运行结果图如下:
因为把所有的第1,2通道值设为0,第0通道值设为255,所以整张图像呈现为蓝色。