#include <iostream>
#include <cmath>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace cv;
struct Mapping
{
int red;
int green;
int blue;
};
void gray2rgb(CvMat *src,CvMat *refer,CvMat **dest)
{
CvMat *referG;
Mapping mapping[256];
int srcRows=src->rows;
int srcCols=src->cols;
*dest=cvCreateMat(srcRows,srcCols,CV_8UC3);
int refRows=refer->rows;
int refCols=refer->cols;
referG=cvCreateMat(refRows,refCols,CV_8U);
cvCvtColor(refer,referG,CV_RGB2GRAY);
for (int i=0;i<256;i++)
{
int d=255,minD=255,minRow,minCol;
for (int j=0;j<refRows;j++)
{
for (int k=0;k<refCols;k++)
{
CvScalar s=cvGet2D(referG,j,k);
d=abs(s.val[0]-i);
if (d<minD)
{
minD=d;
minRow=j;
minCol=k;
}
if (!d) break;
}
if (!d) break;
}
CvScalar s=cvGet2D(refer,minRow,minCol);
mapping[i].blue=s.val[0];
mapping[i].green=s.val[1];
mapping[i].red=s.val[2];
}
for (int i=0;i<srcRows;i++)
for (int j=0;j<srcCols;j++)
{
CvScalar s=cvGet2D(src,i,j);
int v=s.val[0];
cvSet2D(*dest,i,j,cvScalar(mapping[v].red,mapping[v].green,mapping[v].blue));
}
cvReleaseMat(&referG);
}
int main()
{
CvMat *src=cvLoadImageM("arnold.jpg",0);
CvMat *refer=cvLoadImageM("road_trip.jpg",1);
CvMat *dest;
cvShowImage("src",src);
cvShowImage("refer",refer);
gray2rgb(src,refer,&dest);
cvShowImage("dest",dest);
while (cvWaitKey(0)!=27);
cvReleaseMat(&src);
cvReleaseMat(&refer);
cvReleaseMat(&dest);
cvDestroyAllWindows();
return 0;
}
OpenCV Gray2RGB[原创]
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 理解参数 输入参数 1.samples:应该是np.float32数据类型,且每个特征应该放在一个单独的列。 2....
- 原文:http://catchzeng.com/2018/06/12/Learning-OpenCV-with-i...
- 目录:0. 前言1. OpenCV 中怎么读取 MATLAB 的 .mat 文件?2. MATLAB 里的 sum...
- 原因:#pragma comment (lib,"xxx.lib")//默认和引用的CPP文件在一个文件夹中 解决...