隨筆:RGB圖像顏色分離(附代碼)

本來想寫幾個灰度化的函數,感覺灰灰的圖像沒意思,所以就寫了這個;

將BGR的三原色分離:代碼如下
方法1:

	uchar* pImgB = new uchar[col*row*3]; 
	uchar* pImgG = new uchar[col * row * 3];
	uchar* pImgR = new uchar[col * row * 3];

	for (int i = 0; i < row * col * 3; i+=3)
	{
		pImgB[i] = pImg[i];              //分離出藍色
		pImgB[i + 1] = 0;
		pImgB[i + 2] =0;

		pImgG[i] = 0;                    //分離出綠色
		pImgG[i + 1] = pImg[i + 1];
		pImgG[i + 2] = 0;

		pImgR[i] = 0;                    //分離出紅色
		pImgR[i + 1] = 0;
		pImgR[i + 2] = pImg[i + 2];
		
	}
	delete[] pImgB;
	delete[] pImgG;
	delete[] pImgR;

使用opencv的指針(較方法1慢30倍)
方法2:

for (int i = 0; i < img.rows; i ++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			*imgB.ptr(i, j) = *img.ptr(i, j);                    //分離出藍色
			*(imgB.ptr(i, j) + 1) = 0;
			*(imgB.ptr(i, j) + 2) = 0;

			*imgG.ptr(i, j) = 0;								 //分離出藍色
			*(imgG.ptr(i, j) + 1) = *(img.ptr(i, j) + 1);
			*(imgG.ptr(i, j) + 2) = 0;

			*imgR.ptr(i, j) = 0;								 //分離出藍色
			*(imgR.ptr(i, j) + 1) = 0;
			*(imgR.ptr(i, j) + 2) = *(img.ptr(i, j) + 2);
		}	
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章