您的位置:首页 > 运维架构

opencv2学习 ,读取图片,rgb2 lab

2014-09-23 19:15 323 查看
利用mat读取图片,显示其方式,学习了潜莫大师的课程
#include <opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>  
   
using namespace cv;
Mat image0=imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像  
ge1=imread("dota.jpg",0);//载入灰度图  
Mat image2=imread("dota.jpg",199);//载入3通道的彩色图像  
Mat logo=imread("dota_logo.jpg");//载入3通道的彩色图像
</pre><pre name="code" class="cpp">Mat girl=imread("*.jpg"); //载入图像到Mat  
namedWindow("你好"); //创建一个名为 "【1】动漫图"的窗口   
imshow("你好",girl);/
imwrite("*.jpg",girl);存储图片到当前目录
<pre name="code" class="cpp">//定义一个Mat类型,用于存放,图像的ROI  
Mat imageROI;  
//方法一  
imageROI=image(Rect(800,350,logo.cols,logo.rows));  
//方法二  
//imageROI=image(Range(350,350+logo.rows),Range(800,800+logo.cols));  
   
//将logo加到原图上  
addWeighted(imageROI,0.5,logo,0.3,0.,imageROI);  
   
//显示结果  
namedWindow("【4】原画+logo图");  
imshow("【4】原画+logo图",image);
下面写一个RGB转换成Lab的函数,用的很好,可以参考一下
void CRGBToLabDlg::OnOK() {	rgb2lab(36,79,156,L,A,B);	CString str;	str.Format("%f,%f,%f",L,A,B);	AfxMessageBox(str);}void CRGBToLabDlg::rgb2lab(double R, double G, double B, double &Lab_L, double &Lab_a, double &Lab_b){	 double X, Y, Z;     double r = R / 255.000; // rgb range: 0 ~ 1     double g = G / 255.000;     double b = B / 255.000;     // gamma 2.2     if ( r > 0.04045 ) 		r = pow(( r + 0.055 ) / 1.055, 2.4);	else               	    r = r / 12.92;	if ( g > 0.04045 ) 	    g = pow(( g + 0.055 ) / 1.055, 2.4);	else               	    g = g / 12.92;	if ( b > 0.04045 ) 	    b = pow(( b + 0.055 ) / 1.055, 2.4);	else               	    b = b / 12.92;		 // sRGB	 X = r * 0.436052025 + g * 0.385081593 + b * 0.143087414;	 Y = r * 0.222491598 + g * 0.716886060 + b * 0.060621486;	 Z = r * 0.013929122 + g * 0.097097002 + b * 0.714185470;	// XYZ range: 0~100	 X = X * 100.000;	 Y = Y * 100.000;	 Z = Z * 100.000;		 // Reference White Point	double ref_X = 96.4221;	double ref_Y = 100.000;	double ref_Z = 82.5211;	X = X / ref_X;	Y = Y / ref_Y;	Z = Z / ref_Z;		 // Lab	if (X > 0.008856) 	   X = pow(X, 1/3.000);	else              	   X = ( 7.787 * X ) + ( 16 / 116.000 );	if (Y > 0.008856) 	   Y = pow(Y, 1/3.000);	else              	   Y = ( 7.787 * Y ) + ( 16 / 116.000 );	if (Z > 0.008856) 	   Z = pow(Z, 1/3.000);	else              	   Z = ( 7.787 * Z ) + ( 16 / 116.000 );	Lab_L = ( 116.000 * Y ) - 16.000;	Lab_a = 500.000 * ( X - Y );	Lab_b = 200.000 * ( Y - Z );}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: