OpenCV图像处理篇之阈值操作函数
来源:互联网 发布:js trim函数 编辑:程序博客网 时间:2024/05/02 01:56
阈值操作类型
这5种阈值操作类型保留opencv tutorials中的英文名称,依次为:
- Threshold Binary:即二值化,将大于阈值的灰度值设为最大灰度值,小于阈值的值设为0。
- Threshold Binary, Inverted:将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。
- Truncate:将大于阈值的灰度值设为阈值,小于阈值的值保持不变。
- Threshold to Zero:将小于阈值的灰度值设为0,大于阈值的值保持不变。
- Threshold to Zero, Inverted:将大于阈值的灰度值设为0,小于阈值的值保持不变。
OpenCV提供了threshold
函数专门用于阈值操作,其实实现起来很简单,为什么非得调用函数呢?一是熟悉了调用函数很方便,如果一行代码能搞定的事为什么非得用几个循环呢?二是对于新手,自己实现未必敢保证运行效率上未必能达到opencv那样好。
程序分析
/* * FileName : filter_and_threshold.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Sat 20 Sep 2014 07:04:29 PM CST * Brief : * * Copyright (C) MICL,USTB */#include "cv.h"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"using namespace std;using namespace cv;Mat src,gray,dst;const char *wn = "Demo";int th_val = 0;int th_type = 3;int const max_val = 255;int const max_type = 4;int const max_BINARY_val = 255;static void Thresh(int, void *){ /* * 0: Binary * 1: Binary Inverted * 2: Threshold Truncated * 3: Threshold to Zero * 4: Threshold to Zero Inverted */ threshold(gray, dst, th_val, max_BINARY_val, th_type); imshow(wn, dst);}/* * @brief * @inputs * @outputs * @retval */int main(int argc, char *argv[]){ if (argc < 2) { cout<<"Usage: ./threshold [file name]"<<endl; return -1; } // read image as GRAYSCALE src = imread(argv[1], CV_LOAD_IMAGE_COLOR); if (!src.data) { cout<<"Error: read data"<<endl; return -1; } // window to display namedWindow(wn); createTrackbar("Value", wn, &th_val, max_val, Thresh); /* bar */ createTrackbar("Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted", wn, &th_type, max_type, Thresh); cvtColor(src, gray, CV_RGB2GRAY); // Init by Calling Thresh Thresh(0, 0); // wait if ESC be pressed while(1) { char c = waitKey(20); if(c == 27) /* ESC */ { break; } }}
整个程序就一句话是关键:
threshold(gray, dst, th_val, max_BINARY_val, th_type);
threshold的参数依次是原灰度图、输出阈值操作后的图、阈值、最大灰度值以及阈值类型。其中,最大灰度值并不一定就是255,在上面提到的阈值操作1和2中提到,“设为最大灰度值”,如果你觉得不像让图像的最大灰度值大于200,那就设为200就好了。阈值类型取值为0~4,按顺序依次对应前面提到的5种阈值操作类型。
createTrackbar
是创建滑动条的gui函数。以createTrackbar("Value", wn, &th_val, max_val, Thresh);
为例,该滑动条值与变量th_val
的值关联,一旦th_val
改变,自动调用回调函数Thresh,createTrackbar
使用的回调函数格式必需是程序中的void Thresh(int, void *)
,即返回void,参数含int
和void *
类型。
效果
林依晨的的图片被我P一下就成那样了!上面的第二幅图片使用的是阈值操作2。
这回是未知美女一枚,使用阈值操作方法3后的结果如右图,感觉没什么差别,有木有?确实差别不大,谁叫人家头发本来就那么黑那么靓丽呢!细看还是能看出来眉毛变细了,发丝变黑了。
1 0
- OpenCV图像处理篇之阈值操作函数
- opencv图像的阈值操作
- opencv学习(二十八)之基本图像阈值操作threshold
- opencv的阈值处理函数
- opencv中阈值函数处理
- OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作
- Opencv学习笔记-----图像阈值化处理
- C/C++ OpenCV图像的阈值操作
- 灰度图像--图像分割 阈值处理之平均阈值
- 灰度图像--图像分割 阈值处理之P-Tile阈值
- 灰度图像--图像分割 阈值处理之OTSU阈值
- 灰度图像--图像分割 阈值处理之局部阈值
- opencv学习之图像阈值化
- opencv6.2-imgproc图像处理模块之图像尺寸上的操作及阈值
- 图像处理-基本算法之阈值变换
- 图像处理之基于阈值模糊
- 图像处理之基于Otsu阈值二值化
- 图像处理之基于阈值模糊
- RequireJS 与 AngularJS 集成(完整版)
- hadoop2.2.0+zookeeper3.4.5+hbase0.96.2+hive0.13.1分布式环境部署
- 程序人生的四个象限和两条主线
- 关于socket长连接的心跳包
- Postgre: How to import UUID function into Postgre 9.3
- OpenCV图像处理篇之阈值操作函数
- BaseAdapter应用分析及异步加载
- ios8中的UIScreen
- tigase在linux上的绿色安装
- semop异常分析
- ArcSDE初学者需要弄清楚的几个问题 A
- hdu 1257 WA
- strace
- C++ 多线程