通过HSV进行RGB二值化,

来源:互联网 发布:淘宝店铺动态在哪里看 编辑:程序博客网 时间:2024/05/19 23:00

  通过HSV进行RGB二值化,其可以利用与颜色目标提前,如车牌的识别,可以把其蓝色大概区域识别出来,再进行边缘检测,从而实现车牌识别,有利于提高检测的鲁棒性。

#include "stdafx.h"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace cv;using namespace std; int _tmain(int argc, _TCHAR* argv[]){      Mat src=imread("D:/car3.jpg");  Mat src0=src;  Mat src1=src;  Mat m=src;; //分离出H S V 各个分量  Mat h_plane;  Mat s_plane;  Mat v_plane;  Mat dst;//把RGB图像转化为HSV图  blur(src,src,Size(3,3),Point(-1,-1));  cvtColor(src, dst, CV_RGB2HSV );   cvtColor(src, src, CV_RGB2GRAY );  h_plane.create(src.size(),src.type());  s_plane.create(src.size(),src.type());  v_plane.create(src.size(),src.type());//提取HSV中的各分量,然后对图像进行二值化处理      vector<Mat>hsv_planes;  split(dst, hsv_planes );  h_plane=hsv_planes[0];  s_plane=hsv_planes[1];  v_plane=hsv_planes[2];  for (int j = 0; j< src.rows; j++)          {   const uchar* data_h=h_plane.ptr<uchar>(j);   const uchar* data_s=s_plane.ptr<uchar>(j);   const uchar* data_v=v_plane.ptr<uchar>(j);   for (int i = 0; i <src.cols*src.channels(); i++)   {    if( data_h[i]*2<45&&data_s[i]>100&&data_v[i]>80)      {   src.at<uchar>(j,i)=255;     }    else         { src.at<uchar>(j,i)=0;     }   }     }          imshow("HSV图像",dst);imshow("定位图像",src0);        imshow("二值化图像",src);    imwrite("D:/caeq.jpg",src);        waitKey(0);        return(0);    }


0 0
原创粉丝点击