• [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 }
  • 相关阅读:
    kubesphere在应用商店安装rabbitmq注意事项
    js中两个感叹号的作用!!
    Mysql5.7 时间Datetime 索引不生效问题
    Electron NodeJS 订阅和消费RabbitMQ详细笔记
    QGraphicsItem QGraphicsObject 项目进行属性动画时候,需要注意。
    vcpkg默认x64版本
    联级查询 id 和 parentid 左外查询
    SQL server 获取表、视图字段属性
    SQL 异常捕获和事务回滚
    关联查询,两表关联逗号隔开查询
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/6110892.html
Copyright © 2020-2023  润新知