RGB 图像颜色通道分离和合并
图像复制
图像复制
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
void cp_image(Mat src, Mat dst)
{
dst = Mat::zeros(src.rows, src.cols, CV_8UC3);
int size = src.rows * src.cols * 3;
for(int i =0; i<size; i++)
{
dst.data[i] = frame.data[i];
}
imshow("dst", dst);
}
图像颜色通道分离后显示灰度图
void split_gray(Mat src)
{
int size = src.rows * src.cols * 3;
Mat b(src.rows, src.cols, CV_8UC1);
Mat g(src.rows, src.cols, CV_8UC1);
Mat r(src.rows, src.cols, CV_8UC1);
//法1. split function
Mat out[] = {b, g, r}
split(src, out);
// 法2:data
for(int i=0; i< size; i++)
{
if(i%3==0)
{
b.data[i/3] = src.data[i];
g.data[i/3] = src.data[i+1];
r.data[i/3] = src.data[i+2];
}
}
// 法3: data(同法2)
for(int i=0; i<size; i+=3)
{
b.data[i/3] = src.data[i];
g.data[i/3] = src.data[i+1];
r.data[i/3] = src.data[i+2];
}
imshow("b", b);
imshow("g", g);
imshow("r", r);
}
图像颜色通道分离后显示彩色
void split_color(Mat src)
{
int size = src.rows * src.cols * 3;
Mat b(src.rows, src.cols, CV_8UC1);
Mat g(src.rows, src.cols, CV_8UC1);
Mat r(src.rows, src.cols, CV_8UC1);
Mat out[] = {b, g, r}
split(src, out);
Mat b_color(src.rows, src.cols, CV_8UC3);
Mat g_color(src.rows, src.cols, CV_8UC3);
Mat r_color(src.rows, src.cols, CV_8UC3);
for(int i=0; i<size; i+=3)
{
b_color.data[i] = b.data[i/3];
b_color.data[i+1] = 0;
b_color.data[i+2] = 0;
g_color.data[i] = 0;
g_color.data[i+1] = g.data[i/3];
g_color.data[i+2] = 0;
r_color.data[i] = 0;
r_color.data[i+1] = 0;
r_color.data[i+2] = r.data[i/3];
}
imshow("b_color", b_color);
imshow("g_color", g_color);
imshow("r_color", r_color);
}