將一張圖片的三個RGB分量分別取出來

上圖:




Mat process(Mat &img);
int main()
{
	VideoCapture cap("video/Megamind.avi");
	if (!cap.isOpened())
	{
		cout << "could not open" << endl;
		return -1;
	}

	Mat frame;
	cap >> frame;

	Size S = Size((int) cap.get(CV_CAP_PROP_FRAME_WIDTH),
	(int) cap.get(CV_CAP_PROP_FRAME_HEIGHT));

	VideoWriter w;
	w.open("test.avi", CV_FOURCC('X', 'V', 'I', 'D'), cap.get(CV_CAP_PROP_FPS), S + Size(10,10)	);

	Mat dst;
	do
	{
		cap >> frame;
		dst = process(frame);
		w << dst;
	}while (frame.data);
	cout << "done" << endl;
	return 0;
}

Mat process(Mat &img)
{
	Mat src;
	pyrDown(img, src);
	Mat bgr_res[3];
	Mat bgr[3];
	for( int j = 0 ; j < 3; j++)
	{
		split(src, bgr);
		for (int i=0; i<3; ++i)
		{
			if (i != j )
				bgr[i] = Mat::zeros(src.size(), bgr[0].type());
		}
		merge(bgr, 3, bgr_res[j]);
	}
	Mat dst(img.size() + Size(10, 10), src.type());
	Mat ROI(dst, Rect(0,0,src.cols, src.rows));
	src.copyTo(ROI);
	Mat ROI_b(dst, Rect(dst.cols-src.cols, 0, src.cols, src.rows));
	bgr_res[0].copyTo(ROI_b);
	Mat ROI_g(dst, Rect(0, dst.rows-src.rows, src.cols, src.rows));
	bgr_res[1].copyTo(ROI_g);
	Mat ROI_r(dst, Rect(dst.cols-src.cols, dst.rows-src.rows, src.cols, src.rows));
	bgr_res[2].copyTo(ROI_r);
	return dst;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章