其他分享
首页 > 其他分享> > OPENCV颜色检测——库函数版本

OPENCV颜色检测——库函数版本

作者:互联网

OPENCV颜色检测——库函数版本

这里的opencv颜色检测将类里面的核心处理函数改为了调用opencv库中自带的cv::threshold函数

程序源码

#include <opencv2/opencv.hpp>
#include <iostream>

class ColorDetector{
    private:
        //允许的最小差距
        int maxDist;
        //目标颜色
        cv::Vec3b target;
    public:
        //空的构造函数
        //在此初始化默认参数
        ColorDetector():maxDist(100),target(0,0,0){}

        //另一种构造函数,使用目标颜色和颜色距离作为参数
        ColorDetector(uchar blue,uchar green,uchar red,int maxDist):target(blue,green,red),maxDist(maxDist){}

        //设置设置颜色差距的阈值
        //阈值必须是整数否则为0
        void setColorDistanceThreshold(int distance){
            if(distance<0)
                distance = 0;
            maxDist = distance;
        }

        //获取颜色差距的阈值
        int getColorDistanceThreshold() const { return maxDist; }

        //设置需要检测的颜色
        void setTargetColor(uchar blue,uchar green,uchar red){
            //次序为BGR
            target = cv::Vec3b(blue, green, red);
        }

        //设置需要检测的颜色
        void setTargetColor(cv::Vec3b color) { target = color; }

        //获取需要检测的颜色
        cv::Vec3b getTargetColor() { return target; }

        //核心处理函数
        cv::Mat process(cv::Mat &image){
            cv::Mat output;

            //计算与目标颜色的距离的绝对值
            cv::absdiff(image, cv::Scalar(target), output);

            //把图像分割进3幅图像
            std::vector<cv::Mat> images;
            cv::split(output, images);

            //将三个通道相加(这里可能出现饱和的情况)
            output = images[0] + images[1] + images[2];

            //应用阈值
            cv::threshold(output, output, maxDist, 255, cv::THRESH_BINARY_INV);
            return output;
        }

};

int main(){
    ColorDetector cdetect;
    //读入图像
    cv::Mat image = cv::imread("C:Pictures/Photo/wallhaven-3zw579.jpg");
    cv::imshow("image", image);
    if(image.empty())
        return 0;
    cdetect.setTargetColor(226, 180, 130);
    cv::namedWindow("result");
    cv::Mat result = cdetect.process(image);
    cv::imshow("result", result);
    cv::waitKey(0);
    return 0;
}

结果输出

Snipaste_2021-08-30_16-24-00.png

Snipaste_2021-08-30_16-24-016.png

标签:maxDist,image,OPENCV,result,版本,images,output,cv,库函数
来源: https://www.cnblogs.com/3236676588buladuo/p/15206989.html