像素通道分离
- API:split
- 将一个三通道的图像,通过split API进行通道分离,存储到一个vector中;
Mat src = imread("F:/code/images/test.png");
if (src.empty()) {
printf("fail to read");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
vector<Mat> mv;
split(src, mv);
int size = mv.size();
printf("channels:%d", size);
imshow("blue channel", mv[0]);
imshow("green channel", mv[1]);
imshow("red channel", mv[2]);
像素通道合并
- API: merge
- 通过分离得到的每一个通道,都可以进行像素修改等操作,然后可以通过 merge API将分离后的各通道进行合并
mv[2] = Scalar(0);
Mat dst;
merge(mv, dst);
imshow("merge", dst);
ROI :感兴趣区域
- 通过设置矩形,获取图像的感兴趣区域
- PS: sub = src(roi) 为浅拷贝,sub和src(roi)为相同内存地址,因此对于sub的修改会同步到src中;sub = src(roi).clone()为深拷贝,对应不同的内存空间,因此不会相互影响
Rect roi;
roi.x = 100;
roi.y = 100;
roi.width = 250;
roi.height = 250;
Mat sub = src(roi).clone();
bitwise_not(sub, sub);
rectangle(src, roi, Scalar(0, 255, 0), 1, LINE_AA);
imshow("sub", sub);
imshow("input", src);