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
- opencv 中图像处理的一般流程——面向对象
- 图像处理的一般流程(opencv)
- 图像处理的一般流程
- 图像处理中常用的OpenCV函数
- Opencv中图像的缩放处理
- 处理bug的一般流程
- opencv的图像处理
- OpenCV的图像处理
- Opencv 图像处理——平滑处理
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理和图像识别中常用的OpenCV函数
- linux下mysql 最新版安装图解教程
- hdu 4762 Cut the Cake(推导+高精度)
- Largest prime factor(参考博客)
- Solr客户端
- 黑马程序员之java类加载器和java中的反射机制学习
- opencv 中图像处理的一般流程——面向对象
- LogBack小记
- 120、php中foreach()用法
- oracle 11g 手动启动服务
- C++代码,数据结构-内部排序-插入排序-Shell排序
- 一些关于jdbc的小知识点
- final类型
- DRP之JSP HelloWorld
- 打印命令行参数,涉及的问题