滤波算法(4)
来源:互联网 发布:手机做淘宝客怎么做 编辑:程序博客网 时间:2024/06/05 03:34
保护带顶帽滤波
#include<opencv2\opencv.hpp>#include<iostream>#include<opencv2\core\mat.hpp>using namespace std;using namespace cv;
外环区域先膨胀
void out_ring_dilate(Mat src,Mat dst,int innerbox_size, int outerbox_size){//cvtColor(src, src, CV_BGR2GRAY);if ((innerbox_size >= outerbox_size) && (innerbox_size % 2 != outerbox_size % 2)){cout << "核大小出现错误!!!" << endl;}int inner_kernel_size = 0;int outer_kernel_size = 0;if (innerbox_size % 2 == 0){inner_kernel_size = innerbox_size / 2;outer_kernel_size = outerbox_size / 2;}else{inner_kernel_size = (innerbox_size - 1) / 2;outer_kernel_size = (outerbox_size - 1) / 2;}vector<uchar> elementdata;elementdata.clear();//dst = src.clone();for (int i = outer_kernel_size; i <src.rows - outer_kernel_size; ++i){uchar* datadst = dst.ptr<uchar>(i);for (int j = outer_kernel_size; j < src.cols - outer_kernel_size; ++j){/*环形保护带切割成四块分别计算*/elementdata.clear();for (int l = i - outer_kernel_size; l < i - inner_kernel_size; ++l){for (int k = j - outer_kernel_size; k <= j + outer_kernel_size; ++k){elementdata.push_back(src.at<uchar>(l, k));}}for (int l = i - inner_kernel_size; l <= i + inner_kernel_size; ++l){for (int k = j - outer_kernel_size; k < j - inner_kernel_size; ++k){elementdata.push_back(src.at<uchar>(l, k));}}for (int l = i - inner_kernel_size; l <= i + inner_kernel_size; ++l){for (int k = j + inner_kernel_size + 1; k <= j + outer_kernel_size; ++k){elementdata.push_back(src.at<uchar>(l, k));}}for (int l = i + inner_kernel_size + 1; l <= i + outer_kernel_size; ++l){for (int k = j - outer_kernel_size; k <= j + outer_kernel_size; ++k){elementdata.push_back(src.at<uchar>(l, k));}}/*保护带内框计算*//*for (int l = i - inner_kernel_size; l < i + inner_kernel_size; l++){for (int k = j - inner_kernel_size; k < j + inner_kernel_size; k++){elementdata.push_back(0);}}*/sort(elementdata.begin(), elementdata.end());datadst[j] = elementdata[elementdata.size() - 1];}}return ;}外框腐蚀
void outbox_erode(Mat src,Mat dst,int innerbox_size, int outerbox_size){//cvtColor(src, src, CV_BGR2GRAY);if ((innerbox_size >= outerbox_size) && (innerbox_size % 2 != outerbox_size % 2)){cout << "核大小出现错误!!!" << endl;}int inner_kernel_size = 0;int outer_kernel_size = 0;if (innerbox_size % 2 == 0){inner_kernel_size = innerbox_size / 2;outer_kernel_size = outerbox_size / 2;}else{inner_kernel_size = (innerbox_size - 1) / 2;outer_kernel_size = (outerbox_size - 1) / 2;}//dst = src.clone();vector<uchar> elementdata;elementdata.clear();for (int i = outer_kernel_size; i <src.rows - outer_kernel_size; ++i){uchar* dstdata = dst.ptr<uchar>(i);for (int j = outer_kernel_size; j < src.cols - outer_kernel_size; ++j){/*保护带外框计算*/elementdata.clear();for (int l = i - outer_kernel_size; l < i + outer_kernel_size; l++){for (int k = j - outer_kernel_size; k < j + outer_kernel_size; k++){elementdata.push_back(src.at<uchar>(l, k));}}sort(elementdata.begin(), elementdata.end());dstdata[j] = elementdata[0];}}return ;}顶帽操作
Mat cTophat_filter(Mat source, int innerbox_size, int outerbox_size){//Mat src = imread("1.jpg", 0);Mat dst1=source.clone();Mat dst2=source.clone();out_ring_dilate(source,dst1, innerbox_size, outerbox_size);//imshow("out_ring_dilate", dst1);outbox_erode(dst1,dst2, innerbox_size,outerbox_size);//imshow("outbox_erode", dst2);/*背景建模*/dst2 = dst2 - source;return dst2;}
主函数
void main_cTophat_filter(){Mat src = imread("1.jpg",0);Mat dst;dst=cTophat_filter(src, 5, 9);imshow("src", src);imshow("dst",dst);waitKey(0);}
阅读全文
0 0
- 滤波算法(4)
- 滤波算法(3)
- 滤波算法(其他博客)
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 滤波算法
- 一种单片机的滤波算法(转)
- 图像滤波算法
- 常用滤波算法搜集
- 常用滤波算法
- 单片机 滤波算法
- 常用滤波算法搜集
- osea滤波算法
- 滤波算法比较
- 经典的滤波算法
- 类的继承和对象引用
- jquery 图片自动刷新
- AI以来----已不再是未来
- android仿银行客户签名并且保存签名的截图文件,文件名为本地时间
- 中企动力再攀巅峰 开启中国SaaS产业年会之旅
- 滤波算法(4)
- qt5.6.2和Visual Studio 2013的开发环境的整合,手把手详细图文
- 各种排列组合奇怪的数的公式和推导
- Struct2入门二
- RecyclerView 嵌套RecyclerView 或者 ScrollView当中嵌套RecyclerView ,子View会自动滚动到顶部
- 博弈论——acm
- JAVA实现canny算法进行单像素边缘检测(图像处理)
- UnityShader入门精要学习笔记(二十一):深度和法线纹理
- OI模板·快速幂