opencv 中图像处理的一般流程——面向对象

来源:互联网 发布:范冰冰 知乎 编辑:程序博客网 时间:2024/06/03 21:25

图像处理算法opencv实现的通用框架,很实用,总结如下。


将要处理的图片当做参数传递给算法类,每个算法都定义一个类

算法类的定义

            1.必要的参数,参数的set,get函数;

            2.必要的辅助函数,尽量拆分开来,功能独立,短小;

            3. 输出图像作为成员变量,处理结果通过其返回

    

class GetColor{private:    int minDist;     //最小距离    cv::Vec3b target;//目标颜色    cv::Mat result;  //返回结果public:    GetColor();    void setColorDistanceThreshold(int distance);    int getColorDistanceThreshold();    int getDistance(const cv::Vec3b&color )const;    void setTargetColor( unsigned char red,unsigned char green,unsigned char blue);    void setTargetColor(cv::Vec3b color);    cv::Vec3b getTargetColor()const;    cv::Mat process(const cv::Mat &image);};
类实现:

重点是process函数的实现,依据所要用的算法来实现。

#include "getcolor.h"GetColor::GetColor():minDist(100){    target[0]=target[1]=target[2]=0;//初始化目标颜色;}//返回某一像素点处颜色与目标颜色的距离int GetColor:: getDistance(const cv::Vec3b&color )const{    return abs(color[0]-target[0])+           abs(color[1]-target[1])+           abs(color[2]-target[2]);}//设置容忍距离void GetColor::setColorDistanceThreshold(int distance){    if(distance<0)    {        distance=0;    }    minDist=distance;}//得到距离int GetColor::getColorDistanceThreshold(){    return minDist;}//设定目标颜色值三通道法。void GetColor::setTargetColor( unsigned char red,unsigned char green,unsigned char blue){   //opencv 默认是BGR    target[2]=red;    target[1]=green;    target[0]=blue;}//重载设定目标颜色值向量法void GetColor::setTargetColor(cv::Vec3b color){    target =color;}//得到被检测的颜色cv::Vec3b GetColor:: getTargetColor()const{    return target;}cv::Mat GetColor:: process(const cv::Mat &image){    //尺寸和原始图像一样,分配空间通道按照实际需要分配,    result.create(image.rows,image.cols,CV_8U);    //定义迭代器    cv::Mat_<cv::Vec3b>::const_iterator it= image.begin<cv::Vec3b>();    cv::Mat_<cv::Vec3b>::const_iterator itend= image.end<cv::Vec3b>();    cv::Mat_<uchar>::iterator itout=result.begin<uchar>();    for(;it!=itend;++it,++itout)    {        if(getDistance(*it)<minDist)        {            *itout=255;        }        else        {            *itout=0;        }    }    return result;}


处理过程在主函数中完成,按照步骤来进行

简洁明了且不易出错。

   //步骤一1.创建要处理的对象Create Image processor object;    GetColor cdetect;    //步骤二2.读入图片Read input image    cv::Mat image =imread("D:/Lena.jpg");    if(!image.data)        return 0;    //步骤三3.设置输入参数 set input parameters    cdetect.setTargetColor(221,190,230);    cvNamedWindow("result");    //步骤四4.处理图像显示结果    imshow("result",cdetect.process(image));    cv::waitKey();     return 0;





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 恶露一直不干净怎么办 剖腹产后有淤血怎么办 脸部不吸收护肤品怎么办 国地税合并干部怎么办 通力电梯门刀不张开怎么办 即刻棋牌被骗局怎么办 外汇辅导期超期怎么办 增值税忘交了怎么办 衣服买回来就很臭怎么办 买了一等品瓷砖怎么办 新车合格证掉了怎么办 新车合格证丢了怎么办 新车拿不到合格证怎么办 mac只有128g怎么办 mac打不开dmg文件怎么办 七度空间假的怎么办 用了过期卫生巾怎么办 网银盾状态异常怎么办 欠京东2000京豆怎么办 京券过期了怎么办 荒野行动不支持机型怎么办 京东充话费充错怎么办 汽车流量用完了怎么办 近邻宝东西没取完怎么办? 京东自提没去领怎么办 京东银行卡限额怎么办 小米6被锁机了怎么办 小米手机垃圾清不掉怎么办 康佳电视开机黑屏怎么办 京东实名不了怎么办 京东学生认证怎么办 京东次日达没到怎么办 京东京豆负数怎么办 领券达到上限怎么办 京东买东西发票怎么办 京东收货后怎么办 没有买运费险怎么办 1号店卖家发错货不给处理怎么办 买运费险换货怎么办 京东送货不在家怎么办 京东配送不在家怎么办