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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了