Example #1
0
void ColorSpace::GraytoRGB (const Mat& gray, Mat& color)
{
	if (gray.Channels()==3)
	{
		color.Create (gray, TRUE);
		return;
	}
	if (gray.SizeObject() != color.SizeObject() || color.Channels()==3)
	{
		color.Release();
		color.Create (gray.SizeObject(), (TYPE)CVLIB_MAKETYPE(gray.Type(), 3));
	}
	int nH = color.Rows(), nW = color.Cols();
	int elemsize=CVLIB_ELEM_SIZE(gray.Type());
	for (int i = 0; i < nH; i ++)
	{
		uchar* pcolor=color.data.ptr[i];
		uchar* pgray=gray.data.ptr[i];
		for (int k=0; k<nW; k++)
		{
			memcpy (&pcolor[3*k*elemsize], &pgray[k*elemsize], elemsize);
			memcpy (&pcolor[(3*k+1)*elemsize], &pgray[k*elemsize], elemsize);
			memcpy (&pcolor[(3*k+2)*elemsize], &pgray[k*elemsize], elemsize);
		}
	}
}
Example #2
0
void ColorSpace::RGBtoHSV (const Mat& src, Mat& dst)
{
	dst.Create (src.SizeObject(), MAT_Tfloat3);
	BYTE*	pbyte = src.data.ptr[0];
	float*	pfloat = dst.data.fl[0];
	int d=0;
	for (int i=0; i<src.SizeObject().Area(); i++, d+=3)
		RGBtoHSV(pbyte[d], pbyte[d+1], pbyte[d+2], &pfloat[d], &pfloat[d+1], &pfloat[d+2]);
}
Example #3
0
void ColorSpace::Split (const Mat& color, Mat& x, Mat& y, Mat& z)
{
	x.Create (color.SizeObject(), color.Type());
	y.Create (color.SizeObject(), color.Type());
	z.Create (color.SizeObject(), color.Type());
	int d=0;
    int cn=color.Channels();
	uchar* pcolor=color.data.ptr[0];
	uchar* px=x.data.ptr[0];
	uchar* py=y.data.ptr[0];
	uchar* pz=z.data.ptr[0];
	for (int i=0; i<color.SizeObject().Area(); i++, d+=cn)
	{
		px[i]=pcolor[d];
		py[i]=pcolor[d+1];
		pz[i]=pcolor[d+2];
	}
}
Example #4
0
void ColorSpace::RGBtoGray (const Mat& colorImg, Mat& mgray)
{
	if (colorImg.Channels()==1)
	{
		mgray.Create (colorImg, TRUE);
		return;
	}
	if (mgray.SizeObject() != colorImg.SizeObject() || mgray.Channels()==3)
	{
		mgray.Release();
		mgray.Create (colorImg.SizeObject(), colorImg.Type());
	}
	int nH = colorImg.Rows(), nW = colorImg.Cols();
	for (int i = 0; i < nH; i ++)
	{
		uchar* pcolor=colorImg.data.ptr[i];
		uchar* pgray=mgray.data.ptr[i];
		for (int j = 0, k=0; k<nW; j+=3, k++)
			pgray[k] = (uchar)((299 * pcolor[j] + 587 * pcolor[j+1] + 114 * pcolor[j+2]) / 1000);
	}
}