将一张图片的三个RGB分量分别取出来

上图:




Mat process(Mat &img);
int main()
{
	VideoCapture cap("video/Megamind.avi");
	if (!cap.isOpened())
	{
		cout << "could not open" << endl;
		return -1;
	}

	Mat frame;
	cap >> frame;

	Size S = Size((int) cap.get(CV_CAP_PROP_FRAME_WIDTH),
	(int) cap.get(CV_CAP_PROP_FRAME_HEIGHT));

	VideoWriter w;
	w.open("test.avi", CV_FOURCC('X', 'V', 'I', 'D'), cap.get(CV_CAP_PROP_FPS), S + Size(10,10)	);

	Mat dst;
	do
	{
		cap >> frame;
		dst = process(frame);
		w << dst;
	}while (frame.data);
	cout << "done" << endl;
	return 0;
}

Mat process(Mat &img)
{
	Mat src;
	pyrDown(img, src);
	Mat bgr_res[3];
	Mat bgr[3];
	for( int j = 0 ; j < 3; j++)
	{
		split(src, bgr);
		for (int i=
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
由于RGB和Lab颜色空间的范围和表示方式不同,因此需要进行一定的转换才能将Lab分量合并为RGB图片。 首先,我们需要将Lab分量转换为XYZ分量,再将XYZ分量转换为RGB分量。这里需要用到一个矩阵变换,具体如下: ``` X = 0.412453*l + 0.357580*a + 0.180423*b Y = 0.212671*l + 0.715160*a + 0.072169*b Z = 0.019334*l + 0.119193*a + 0.950227*b R = 3.240479*X - 1.537150*Y - 0.498535*Z G = -0.969256*X + 1.875992*Y + 0.041556*Z B = 0.055648*X - 0.204043*Y + 1.057311*Z ``` 其中,l、a、b分别是Lab颜色空间的三个分量,X、Y、Z是中间的XYZ分量,R、G、B是最终的RGB分量。 接下来,我们可以将每个分量RGB图片分别显示出来。具体过程如下: ```python import cv2 import numpy as np # 读取l、a、b分量 l = cv2.imread('l.jpg', cv2.IMREAD_GRAYSCALE) a = cv2.imread('a.jpg', cv2.IMREAD_GRAYSCALE) b = cv2.imread('b.jpg', cv2.IMREAD_GRAYSCALE) # 将l、a、b分量转换为RGB图片 l_rgb = cv2.cvtColor(l, cv2.COLOR_GRAY2RGB) a_rgb = cv2.cvtColor(a, cv2.COLOR_GRAY2RGB) b_rgb = cv2.cvtColor(b, cv2.COLOR_GRAY2RGB) # 将Lab分量合并为RGB图片 l = l.astype(np.float32) / 255.0 a = a.astype(np.float32) / 255.0 - 0.5 b = b.astype(np.float32) / 255.0 - 0.5 X = 0.412453*l + 0.357580*a + 0.180423*b Y = 0.212671*l + 0.715160*a + 0.072169*b Z = 0.019334*l + 0.119193*a + 0.950227*b R = 3.240479*X - 1.537150*Y - 0.498535*Z G = -0.969256*X + 1.875992*Y + 0.041556*Z B = 0.055648*X - 0.204043*Y + 1.057311*Z lab = np.stack([R, G, B], axis=-1) lab = np.clip(lab, 0.0, 1.0) lab = (255 * lab).astype(np.uint8) # 显示l、a、b分量RGB图片和合成的RGB图片 cv2.imshow('l_rgb', l_rgb) cv2.imshow('a_rgb', a_rgb) cv2.imshow('b_rgb', b_rgb) cv2.imshow('lab', lab) cv2.waitKey() cv2.destroyAllWindows() ``` 运行上述代码,将会显示l、a、b分量RGB图片和合成的RGB图片。其中,l、a、b分量RGB图片可以看作是将对应的分量灰度图像进行了伪彩色处理得到的。而合成的RGB图片则是将三个分量合并为一张彩色图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值