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::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);
	}
}
void GaussianBlur(const Mat& src, Mat& dst, int kwidth, int kheight,
                  double sigmax, double sigmay) {
  if (!(kwidth % 2) || !(kheight % 2) || kwidth < 0 || kheight < 0 ||
      (kwidth == 1 && kheight == 1) || sigmax <= 0 || sigmay <= 0) {
    dst = src;
    return;
  }

  Mat dst_(src.rows, src.cols);
  dst_.Allocate();

  // Get kernels
  vector<float> kernelx, kernely;
  GetGaussianKernel(kernelx, kwidth, sigmax);
  GetGaussianKernel(kernely, kheight, sigmay);

  // Blur
  GaussianBlurImpl(src, dst_, kernelx, kernely);

  dst.Release();
  dst = dst_;
}