您的位置:首页 > 运维架构

学习OpenCV:滤镜系列(14)——载入选区

2013-06-30 13:42 211 查看
==============================================

版权所有:小熊不去实验室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]);

}


原图:



载入选区:

红通道:                                                            绿通道:                                                          


    

  

蓝通道:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: