【20160924】GOCVHelper 图像增强部分(4)

//使得rect区域半透明

Mat translucence(Mat src,Rect rect,int idepth){

Mat dst = src.clone();

Mat roi = dst(rect);

roi += cv::Scalar(idepth,idepth,idepth);

return dst;

}

将选择的区域打上变成半透明。虽然这只是一个简单的函数,但是使用起来灵活多变。

比如说,可以将图像某个区域变成半透明,然后在上面写字,这样起到强化作用;

也可以将一个区域图片在半透明和不透明之间切换,起到强掉作用。

//使得rect区域打上马赛克

Mat mosaic(Mat src,Rect rect,int W,int H){

Mat dst = src.clone();

Mat roi = dst(rect);

for (int i=W; i<roi.cols; i+=W) {

for (int j=H; j<roi.rows; j+=H) {

uchar s=roi.at<uchar>(j-H/2,(i-W/2)*3);

uchar s1=roi.at<uchar>(j-H/2,(i-W/2)*3+1);

uchar s2=roi.at<uchar>(j-H/2,(i-W/2)*3+2);

for (int ii=i-W; ii<=i; ii++) {

for (int jj=j-H; jj<=j; jj++) {

roi.at<uchar>(jj,ii*3+0)=s;

roi.at<uchar>(jj,ii*3+1)=s1;

roi.at<uchar>(jj,ii*3+2)=s2;

}

}

}

}

return dst;

}

将选择的区域打上马赛克,也就是常见的所谓打码。

//基于颜色直方图的距离计算

double GetHsVDistance(Mat src_base,Mat src_test1){

Mat   hsv_base;

Mat   hsv_test1;

///  Convert  to  HSV

cvtColor(  src_base,  hsv_base,  COLOR_BGR2HSV  );

cvtColor(  src_test1,  hsv_test1,  COLOR_BGR2HSV  );

///  Using  50  bins  for  hue  and  60  for  saturation

int  h_bins  =  50;  int  s_bins  =  60;

int  histSize[]  =  {  h_bins,  s_bins  };

//  hue  varies  from  0  to  179,  saturation  from  0  to  255

float  h_ranges[]  =  {  0,  180  };

float  s_ranges[]  =  {  0,  256  };

const  float*  ranges[]  =  {  h_ranges,  s_ranges  };

//  Use  the  o-th  and  1-st  channels

int  channels[]  =  {  0,  1  };

///  Histograms

MatND  hist_base;

MatND  hist_test1;

///  Calculate  the  histograms  for  the  HSV  images

calcHist(  &hsv_base,  1,  channels,  Mat(),  hist_base,  2,  histSize,  ranges,  true,  false  );

normalize(  hist_base,  hist_base,  0,  1,  NORM_MINMAX,  -1,  Mat()  );

calcHist(  &hsv_test1,  1,  channels,  Mat(),  hist_test1,  2,  histSize,  ranges,  true,  false  );

normalize(  hist_test1,  hist_test1,  0,  1,  NORM_MINMAX,  -1,  Mat()  );

///  Apply  the  histogram  comparison  methods

double  base_test1  =  compareHist(  hist_base,  hist_test1,  0  );

return base_test1;

}

基于颜色直方图的增强算法是一种经典的图像增强算法。这里提供了opencv实现。这个部分应该是从gimp中扒出来的。

来自为知笔记(Wiz)

时间: 2024-08-11 10:07:44

【20160924】GOCVHelper 图像增强部分(4)的相关文章

【20160924】GOCVHelper 图像增强部分(1)

图像增强是图像处理的第一步.这里集成了一些实际使用过程中有用的函数. //读取灰度或彩色图片到灰度 Mat imread2gray(string path){ Mat src = imread(path); Mat srcClone = src.clone(); if (CV_8UC3 == srcClone.type() ) cvtColor(srcClone,srcClone,CV_BGR2GRAY); return srcClone; } 算法核心在于判断读入图片的通道数,如果是灰度图片则

【20160924】GOCVHelper 图像增强部分(2)

//填充孔洞 //fillholes Mat fillHoles(Mat src){ Mat dst = getInnerHoles(src); threshold(dst,dst,0,255,THRESH_BINARY_INV); dst = src + dst; return dst; } //获得图像中白色的比率 float getWhiteRate(Mat src){ int iWhiteSum = 0; for (int x =0;x<src.rows;x++){ for (int y

【20160924】GOCVHelper 图像增强部分(5)

// Multiply 正片叠底 void Multiply(Mat& src1, Mat& src2, Mat& dst) { for(int index_row=0; index_row<src1.rows; index_row++) { for(int index_col=0; index_col<src1.cols; index_col++) { for(int index_c=0; index_c<3; index_c++) dst.at<Vec3

【20160924】GOCVHelper 图像增强部分(3)

//顶帽去光差,radius为模板半径 Mat moveLightDiff(Mat src,int radius){ Mat dst; Mat srcclone = src.clone(); Mat mask = Mat::zeros(radius*2,radius*2,CV_8U); circle(mask,Point(radius,radius),radius,Scalar(255),-1); //顶帽 erode(srcclone,srcclone,mask); dilate(srcclo

基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)

GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的功能增强. 这里将算法库开放源代码,并且编写一系列blog对函数实现进行说明.目的是在于“取之于互联网,用之于互联网”.并且也希望该库能够继续发展下去. 由于算法库基于Opencv和Mfc进行编写,所以要求阅读使用者具备一定基础. 最终提交的是GOCVHelper.h 和GOCVHelper版本号.

【20160924】GOCVHelper综述

GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的功能增强. 这里将算法库开放源代码,并且编写一系列blog对函数实现进行说明.目的是在于“取之于互联网,用之于互联网”.并且也希望该库能够继续发展下去. 由于算法库基于Opencv和Mfc进行编写,所以要求阅读使用者具备一定基础. 最终提交的是GOCVHelper.h 和GOCVHelper版本号.

【20160924】GOCVHelper MFC增强算法(5)

CString ExportListToExcel(CString  sExcelFile,CListCtrl* pList, CString strTitle) { CString warningStr; if (pList->GetItemCount ()>0) { CDatabase database; CString sSql; CString tableName = strTitle; // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*

【20160924】GOCVHelper 图像处理部分(1)

增强后的图像需要通过图像处理获得定量的值.在实际程序设计过程中,轮廓很多时候都是重要的分析变量.参考Halcon的相关函数,我增强了Opencv在这块的相关功能.      //寻找最大的轮廓 VP FindBigestContour(Mat src){ int imax = 0; //代表最大轮廓的序号 int imaxcontour = -1; //代表最大轮廓的大小 std::vector<std::vector<cv::Point>>contours; findContou

【20160924】GOCVHelper 图像处理部分(3)

//根据轮廓的圆的特性进行选择 vector<VP> selectShapeCircularity(Mat src,Mat& draw,vector<VP> contours,float minvalue,float maxvalue){ vector<VP> result_contours; draw = Mat::zeros(src.rows,src.cols,CV_8UC3); for (int i=0;i<contours.size();i++){