• [OPENCV] 第一个程序 识别颜色


    它可以鉴别出图像中含有给定颜色的所有像素,该算法输入的是图像以及颜色,并返回表示含有指定颜色的像素的二值图像。该算法还需要指定另外一个参数,即对颜色偏差的容忍度。

    实现效果

    实现后

     1 #include <QCoreApplication>
     2 #include <opencv2/core/core.hpp>
     3 #include <opencv2/highgui/highgui.hpp>
     4 #include<cstdio>
     5 #include<iostream>
     6 
     7 class ColorDector{
     8 private:
     9     int minDist;
    10     cv::Vec3b target;
    11     cv::Mat result;
    12 public:
    13 ColorDector(){
    14     minDist=100;
    15     target[0]=target[1]=target[2]=0;
    16 }
    17 cv::Mat process(const cv::Mat &image){
    18     //分配新的阵列数据
    19     result.create(image.rows,image.cols,CV_8U);
    20     cv::Mat_<cv::Vec3b>::const_iterator it=image.begin<cv::Vec3b>();
    21     cv::Mat_<cv::Vec3b>::const_iterator itend=image.end<cv::Vec3b>();
    22     cv::Mat_<uchar>::iterator itout=result.begin<uchar>();
    23     for(;it!=itend;++it,++itout){
    24         if(getDistance(*it)<minDist){
    25             *itout=255;
    26         }
    27         else{
    28             *itout=0;
    29         }
    30     }
    31     return result;
    32 }
    33 
    34 int getDistance(const cv::Vec3b& color)const{
    35     return abs(color[0]-target[0])+abs(color[1]-target[1])+abs(color[2]-target[2]);
    36 }
    37 void setColorDistanceThreadhold(int distance){
    38     if(distance<0)  distance=0;
    39     minDist=distance;
    40 }
    41 
    42 int getColorDIstanceThreshold()const{
    43     return minDist;
    44 }
    45 void setTargetColor(unsigned char red,unsigned char green,unsigned char blue){
    46     target[2]=red;
    47     target[1]=green;
    48     target[0]=blue;
    49 }
    50 };
    51 int main()
    52 {
    53 
    54     ColorDector cdetect;
    55     cv::Mat image=cv::imread("C:/Users/Administrator/Desktop/1.jpg");
    56     if(!image.data) return 0;
    57     cv::Mat climage=image.clone();
    58     cdetect.setTargetColor(220,220,200);
    59     cv::namedWindow("result");
    60     cv::imshow("result",cdetect.process(climage));
    61     //cv::imshow("result",climage);
    62     cv::waitKey();
    63 
    64 
    65     return 0;
    66 }
  • 相关阅读:
    你要结婚了丶
    20150806这是个悲伤的日子。
    今天是我的生日。
    这是从word发的第一篇博客。
    【关于JavaScript】自动计算的实例
    【关于JavaScript】常见表单用户名、密码不能为空
    【关于php】Appserv中关于DW配置站点问题
    【关于php】Appserv的安装注意事项
    【无题】写在5月18日
    HTML中如何添加日历插件(JQUERY)
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/6110892.html
Copyright © 2020-2023  润新知