opencv学习之路(6):图像相似颜色的查找

相似颜色的查找

#include <iostream>
#include "opencv2/opencv.hpp"
#include <math.h>
using namespace std;
cv::Vec3b target;
int minDist;
int getDistance(const cv::Vec3b &color)
{
    return abs(color[0]-target[0])+
            abs(color[1]-target[1])+
            abs(color[2]-target[2]);
}
void setTargetColor(cv::Vec3b color){
    target=color;
}
void setTargetColor(uchar Red,uchar Green,uchar Blue)
{
    target[2]=Red;
    target[1]=Green;
    target[0]=Blue;
}
void process(cv::Mat &image,cv::Mat &result)
{
    result.create(image.rows,image.cols,image.type());
    cv::MatIterator_<cv::Vec3b> itbegin=image.begin<cv::Vec3b>();
    cv::MatIterator_<cv::Vec3b> itend=image.end<cv::Vec3b>();
    cv::MatIterator_<cv::Vec3b> out= result.begin<cv::Vec3b>();
    int ipixelcount=0;
    for(;itbegin!=itend;itbegin++,out++)
    {
        if(getDistance(*itbegin)<minDist)
        {
            (*out)[0]=0xff;
            (*out)[1]=0xff;
            (*out)[2]=0xff;
        }
        else
        {
            *out=0;
        }
        ipixelcount++;
    }
    cout<<"size vec3b"<<sizeof(*out)<<endl;
    cout<<ipixelcount<<endl;
}
int main()
{
    cv::Mat image=cv::imread("E:/QtMaterial/images/boldt.jpg");
    minDist=100;
    cv::Mat result;
    setTargetColor(130,190,230);
    process(image,result);
    cv::namedWindow("SetColor");
    cv::imshow("SetColor",result);
    cv::imshow("Origin",image);
    cv::waitKey();
    return 0;
}

 

转载于:https://www.cnblogs.com/Jason-AnHui/p/3474855.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值