首页 > 代码库 > OpenCV3编程入门读书笔记2-core组件

OpenCV3编程入门读书笔记2-core组件

一、颜色空间缩减

1、概念

如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响。利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取为新值0,10~19取为10,以此类推,这样每个像素有26*26*26种可能值,比上面的可能值要小很多。

2、公式

P_New = ( P_Old / divide ) * divide   (P表示像素值)

3、处理

如果对原图像每个像素都进行上面的公式运算,运算量将非常大。可以将0~255这256种情况对应的新值计算出来,存放在table中,然后将原图像的像素值按照table表取出新值即可。

uchar table[256];

for( int i=0; i<256; i++ )

  table[i] = ( i / divide ) * divide;

P_New = table[ P_New ];

4、LUT函数

OpenCV提供了LUT函数帮我们完成上面的处理。

示例:

 1 Mat srcImage = imread("test.jpg");
 2     
 3 Mat lookUpTable(1,256,CV_8U);
 4 uchar* p = lookUpTable.data;
 5 for(int i=0; i<256; i++)
 6 {
 7     p[i] = i/30*30;
 8 }
 9 
10 Mat destImage;
11 destImage.create(srcImage.size(),srcImage.type());
12 
13 LUT(srcImage,lookUpTable,destImage);
14 
15 imshow("srcImage",srcImage);
16 imshow("destImage",destImage);

 二、图像叠加

 1 Mat srcImage = imread("test.jpg");
 2 Mat logoImage = imread("logo.png");
 3 //加载掩模(必须是灰度图)
 4 Mat maskImage = imread("logo.png",0);
 5 
 6 //设置感兴趣区域    
 7 Mat ROIImage = srcImage(Rect(20,20,logoImage.cols,logoImage.rows));
 8     
 9 logoImage.copyTo(ROIImage,maskImage);
10 
11 imshow("srcImage",srcImage);

三、线性混合操作

1、计算数组加权和:addWeighted()

 

OpenCV3编程入门读书笔记2-core组件