opencv-阈值处理
从原理:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html
基本理论:
- 注意:
- 本节的解释出自Bradski与Kaehler的书籍 Learning OpenCV 。
什么是阈值?
最简单的图像切割的方法。
应用举例:从一副图像中利用阈值切割出我们须要的物体部分(当然这里的物体能够是一部分或者总体)。这种图像切割方法是基于图像中物体与背景之间的灰度差异。并且此切割属于像素级的切割。
为了从一副图像中提取出我们须要的部分,应该用图像中的每个像素点的灰度值与选取的阈值进行比較,并作出对应的推断。
(注意:阈值的选取依赖于详细的问题。即:物体在不同的图像中有可能会有不同的灰度值。
一旦找到了须要切割的物体的像素点,我们能够对这些像素点设定一些特定的值来表示。(比如:能够将该物体的像素点的灰度值设定为:‘0’(黑色),其它的像素点的灰度值为:‘255’(白色);当然像素点的灰度值能够随意,但最好设定的两种颜色对照度较强,方便观察结果)。
阈值化的类型:
OpenCV中提供了阈值(threshold)函数: threshold 。
这个函数有5种阈值化类型,在接下来的章节中将会详细介绍。
为了解释阈值切割的过程。我们来看一个简单有关像素灰度的图片。该图例如以下。该图中的蓝色水平线代表着详细的一个阈值。
阈值类型1:二进制阈值化
该阈值化类型例如以下式所看到的:
解释:在运用该阈值类型的时候。先要选定一个特定的阈值量。比方:125。这样,新的阈值产生规则能够解释为大于125的像素点的灰度值设定为最大值(如8位灰度值最大为255)。灰度值小于125的像素点的灰度值设定为0。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
阈值类型2:反二进制阈值化
该阈值类型例如以下式所看到的:
解释:该阈值化与二进制阈值化相似,先选定一个特定的灰度值作为阈值,只是最后的设定值相反。
(在8位灰度图中,比如大于阈值的设定为0。而小于该阈值的设定为255)。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
阈值类型3:截断阈值化
该阈值化类型例如以下式所看到的:
解释:相同首先须要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。
(比如:阈值选取为125,那小于125的阈值不改变。大于125的灰度值(230)的像素点就设定为该阈值)。
阈值类型4:阈值化为0
该阈值类型例如以下式所看到的:
解释:先选定一个阈值,然后对图像做例如以下处理:1 像素点的灰度值大于该阈值的不进行不论什么改变;2 像素点的灰度值小于该阈值的,其灰度值所有变为0。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
阈值类型5:反阈值化为0
该阈值类型例如以下式所看到的:
解释:原理类似于0阈值,可是在对图像做处理的时候相反,即:像素点的灰度值小于该阈值的不进行不论什么改变,而大于该阈值的部分。其灰度值所有变为0。
部分代码:
// ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv; Mat src,gray,dst;
int thr_value = 0;
int thr_type = 0; const int max_type = 4;
const int max_value = 255;
const int max_binary_value = 255; char *windowName = "Demo";
void Image_thred(int,void*);
int _tmain(int argc, _TCHAR* argv[])
{
src = imread("test.png"); if(!src.data)
return -1; cvtColor(src,gray,CV_RGB2GRAY);
namedWindow("灰度图",CV_WINDOW_AUTOSIZE);
imshow("灰度图",gray); namedWindow(windowName,CV_WINDOW_AUTOSIZE);
createTrackbar("Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted",
windowName,&thr_type,max_type,Image_thred);
createTrackbar("Value",
windowName,&thr_value,max_value,Image_thred); Image_thred(0,0);
waitKey(0);
return 0;
} void Image_thred(int,void*)
{
/* 0: 二进制阈值
1: 反二进制阈值
2: 截断阈值
3: 0阈值
4: 反0阈值
*/
threshold(gray,dst,thr_value,max_binary_value,thr_type);
imshow(windowName,dst);
}
关键函数解释:
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
- src_gray: 输入的灰度图像的地址。
- dst: 输出图像的地址。
- threshold_value: 进行阈值操作时阈值的大小。
- max_BINARY_value: 设定的最大灰度值(该參数运用在二进制与反二进制阈值操作中)。
- threshold_type: 阈值的类型。
从上面提到的5种中选择出的结果。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
opencv-阈值处理的更多相关文章
- OpenCV阈值化处理
图像的阈值化就是利用图像像素点分布规律,设定阈值进行像素点分割,进而得到图像的二值图像.图像阈值化操作有多种方法,常用方法有经典的OTSU.固定阈值.自适应阈值.双阈值及半阈值化操作.这里对各种阈值化 ...
- OpenCV阈值处理函数threshold处理32位彩色图像的案例
☞ ░ 前往老猿Python博文目录 ░ 一.概述 openCV图像的阈值处理又称为二值化,之所以称为二值化,是它可以将一幅图转换为感兴趣的部分(前景)和不感兴趣的部分(背景).转换时,通常将某个值( ...
- OpenCV——阈值化
上述五种结合CV_THRESH_OTSU(自适应阈值),写成:THRESH_BINARY | CV_THRESH_OTSU
- opencv——阈值分割图像
#include "stdafx.h" #include "opencv2\opencv.hpp" using namespace cv; IplImage* ...
- OpenCV图像的全局阈值二值化函数(OTSU)
cv::threshold(GrayImg, Bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//灰度图像二值化 CV_THRESH_OTSU是提取图像最 ...
- OpenCV 学习笔记03 threshold函数
opencv-python 4.0.1 简介:该函数是对数组中的每一个元素(each array element)应用固定级别阈值(Applies a fixed-level threshold) ...
- OpenCV3入门(五)图像的阈值
1.图像阈值与二值化 阈值是一种简单的图像分割方法,一幅图像包括目标物体(前景).背景还有噪声,要想从数字图像中直接提取出目标物体,可以设定一个像素值即阈值,然后用图像的每一个像素点和阈值做比较,给出 ...
- 项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
前言 本项目的出现理由只是笔者的一个念头,于是利用专业Qt和Opencv相关的知识开发一个辅助工具,本文章仅用于Qt和Opencv结合的学习. Demo演示效果 运行包下载地 ...
- 老猿Python博文汇总目录--按标题排序
☞ ░ 前往老猿Python博文目录 ░ 本部分为老猿CSDN全部博文的汇总(含转载部分),所有文章在此未进行归类,仅按文章标题排序,方便关键字查找.本部分内容将至少以周为单位定期更新,可能不包含发布 ...
- Opencv step by step - 自适应阈值
上个博客提到的阈值化只是针对图像全局进行阈值化,opencv提供了一个更好的函数cvAdaptiveThreshold,可以做到局部特征的阈值化,这样一来, 整个图像的信息可以被更好的提取. #inc ...
随机推荐
- MVC区域 vs2013 mvc 搭建基架项
http://www.it165.net/pro/html/201404/12822.html
- 《Effective C++ 》学习笔记——规定10
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- WCF配置文件
因为要上传较大的图片,WCF传递数组的默认的最大数组16KB就不够了.以下讲解配置内容. 服务端配置 这里一个WCF项目中有1个服务,配置文件如下(位于system.serviceModel标签中): ...
- MySQL 存储过程和函数(转)
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
- cocos3——8.实现初学者指南
1.采用ClippingNode裁剪范围 写作物接口: function createClipNode(node, stencil, inverted) { var clip_node = new c ...
- 冒泡排序java
先对冒泡排序做一个简单的解释,然后是代码的实现.解释出资<java的数据结构和算法>,大家可以看看. 排序类: package com.dxx.order; public class Bu ...
- 高质量c c++编程
第1章 文件结构 每一个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.还有一个文件用于保存程序的实现(implementation),称为定义(de ...
- Matlab强迫症产生的图像
最近流行的网络迷恋的照片做头像,闲来无事,取matlab获取一个建设者,它可以产生包括0-9以及99+OCD. 原理很easy,图叠加,这里为了降低文件,将数字图片保存在.mat二进制文件里. === ...
- iOS:编译错误 linker command failed with exit code 1 (use -v to see invocation)
将project不加入.m要求加入 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzI0MzQ2OQ==/font/5a6L5L2T/fontsi ...
- Android自带样式
Android系统自带样式: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式 android:the ...