问题:内存中已有图像灰度数据(24位真彩色,一整幅图像或一幅图像的某块区域),使用OpenCV实现对这些图像数据颜色空间由RGB到HSV的转换
解决:
BOOL RGB2HSV()
{
//lBlockWidth、nBlockHeight分别为图像数据块的宽高
//创建图像矩阵
CvMat* matSrc = cvCreateMat(nBlockHeight,lBlockWidth,CV_8UC3);
cvZero(matSrc);
BYTE *pSrc = (BYTE*)cvPtr2D(matSrc,0,0);
//创建结果矩阵
CvMat* matHSV = cvCreateMat(nBlockHeight,lBlockWidth,CV_8UC3);
cvZero(matHSV);
BYTE *pHSV = (BYTE*)cvPtr2D(matHSV,0,0);
//pSrc元素赋值
…………
cvCvtColor(matSrc,matHSV,CV_RGB2HLS);
//HSV归一化到0~255(cvCvtColor()转换后HSV的范围分别是0~180、0~255、0~255)
long long lDis = 0;
for (long lRow = 0;lRow < nBlockHeight;++lRow)
{
lDis = lRow*lBlockWidth*lBandNum;
for (long lIndexCol = 0;lIndexCol < lBlockWidth;++lIndexCol)
{
pHSV[lDis] *= dHRatio;
lDis += 3;
}
}
cvReleaseMat(&matSrc);
cvReleaseMat(&matHSV);
return TRUE;
}