#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文件在一个文件夹中 解决...