學習OpenCV:濾鏡系列(14)——載入選區

==============================================

版權所有:小熊不去實驗室CSDN博客

==============================================


載入選區就是在圖像中選取高亮的部分

R=min(127.5,avg)

if(pix[x,y]>R)

dst[x,y]=255;

else

dst[x,y]=255;


#include <math.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;
using namespace std;

int R=11;

int main()
{
	Mat src = imread("D:/img/arrow03.jpg",1);
	imshow("src",src);
	int width=src.cols;
	int heigh=src.rows;
	Mat img(heigh/2,width/2,CV_8UC3);
	resize(src,img,img.size());
	Scalar avg=mean(src);
	Mat dst(img.size(),CV_8UC3);
	Mat mask1u[3];
	float avg0 = avg[0]*2>127.5 ? 127.5:avg[0]*2;
	float avg1 = avg[1]*2>127.5 ? 127.5:avg[1]*2;
	float avg2 = avg[2]*2>127.5 ? 127.5:avg[2]*2;
	float tmp,r;
	for (int y=0;y<heigh/2;y++)
	{
		uchar* imgP=img.ptr<uchar>(y);
		uchar* dstP=dst.ptr<uchar>(y);
		for (int x=0;x<width/2;x++)
		{
			r = (float)imgP[3*x];
			if(r>avg0)
				tmp = 255;
			else
				tmp = 0;
			dstP[3*x]=(uchar)(tmp);
			
			r = (float)imgP[3*x+1];
			if(r>avg1)
				tmp = 255;
			else
				tmp = 0;
			dstP[3*x+1]=(uchar)(tmp);

			r = (float)imgP[3*x+2];
			if(r>avg2)
				tmp = 255;
			else
				tmp = 0;
			dstP[3*x+2]=(uchar)(tmp);
		}
	}
	imshow("載入選區",dst);

	split(dst,mask1u);
	imshow("藍通道選區",mask1u[0]);
	imshow("綠通道選區",mask1u[1]);
	imshow("紅通道選區",mask1u[2]);

	waitKey();
 	//imwrite("D:/img/強光.jpg",dst);
 	imwrite("D:/img/藍通道選區.jpg",mask1u[0]);
 	imwrite("D:/img/藍通道選區.jpg",mask1u[1]);
 	imwrite("D:/img/藍通道選區.jpg",mask1u[2]);

}

原圖:


載入選區:

紅通道:                                                            綠通道:                                                          

      

藍通道:




發佈了176 篇原創文章 · 獲贊 62 · 訪問量 160萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章