opencv2学习 ,读取图片,rgb2 lab

来源:互联网 发布:敏捷网络功能 编辑:程序博客网 时间:2024/06/05 06:28

利用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 Pointdouble 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; // Labif (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 );}





0 0
原创粉丝点击