opencv-阈值处理

opencv-阈值处理

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。


从原理:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html

目标:

本节简单介绍:

  • OpenCV中的阈值(threshold)函数: threshold 的运用。

基本理论:

注意:
本节的解释出自Bradski与Kaehler的书籍 
Learning OpenCV 。

什么是阈值?

  • 最简单的图像切割的方法。

  • 应用举例:从一副图像中利用阈值切割出我们须要的物体部分(当然这里的物体能够是一部分或者总体)。这种图像切割方法是基于图像中物体与背景之间的灰度差异。并且此切割属于像素级的切割。

  • 为了从一副图像中提取出我们须要的部分,应该用图像中的每个像素点的灰度值与选取的阈值进行比較,并作出对应的推断。

    (注意:阈值的选取依赖于详细的问题。即:物体在不同的图像中有可能会有不同的灰度值。

  • 一旦找到了须要切割的物体的像素点,我们能够对这些像素点设定一些特定的值来表示。(比如:能够将该物体的像素点的灰度值设定为:‘0’(黑色),其它的像素点的灰度值为:‘255’(白色);当然像素点的灰度值能够随意,但最好设定的两种颜色对照度较强,方便观察结果)。

    Threshold simple example

阈值化的类型:

  • OpenCV中提供了阈值(threshold)函数: threshold 。

  • 这个函数有5种阈值化类型,在接下来的章节中将会详细介绍。

  • 为了解释阈值切割的过程。我们来看一个简单有关像素灰度的图片。该图例如以下。该图中的蓝色水平线代表着详细的一个阈值。

    Threshold Binary

阈值类型1:二进制阈值化

  • 该阈值化类型例如以下式所看到的:

    解释:在运用该阈值类型的时候。先要选定一个特定的阈值量。比方:125。这样,新的阈值产生规则能够解释为大于125的像素点的灰度值设定为最大值(如8位灰度值最大为255)。灰度值小于125的像素点的灰度值设定为0。

    Threshold Binary

  • opencv-阈值处理

阈值类型2:反二进制阈值化

  • 该阈值类型例如以下式所看到的:

    解释:该阈值化与二进制阈值化相似,先选定一个特定的灰度值作为阈值,只是最后的设定值相反。

    (在8位灰度图中,比如大于阈值的设定为0。而小于该阈值的设定为255)。

    Threshold Binary Inverted

  • opencv-阈值处理

阈值类型3:截断阈值化

  • 该阈值化类型例如以下式所看到的:

    解释:相同首先须要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。

    (比如:阈值选取为125,那小于125的阈值不改变。大于125的灰度值(230)的像素点就设定为该阈值)。

    Threshold Truncate

  • opencv-阈值处理

阈值类型4:阈值化为0

  • 该阈值类型例如以下式所看到的:

    解释:先选定一个阈值,然后对图像做例如以下处理:1 像素点的灰度值大于该阈值的不进行不论什么改变;2 像素点的灰度值小于该阈值的,其灰度值所有变为0。

    Threshold Zero

  • opencv-阈值处理

阈值类型5:反阈值化为0

  • 该阈值类型例如以下式所看到的:

    解释:原理类似于0阈值,可是在对图像做处理的时候相反,即:像素点的灰度值小于该阈值的不进行不论什么改变,而大于该阈值的部分。其灰度值所有变为0。

    Threshold Zero Inverted

  • opencv-阈值处理

部分代码:

// 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种中选择出的结果。


版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117272.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python定时器

    python定时器

    2021年11月19日
    46
  • mysql 批量查询插入,MySQL批量插入查询出来的数据

    mysql 批量查询插入,MySQL批量插入查询出来的数据timg.jpg先看SQL:INSERTINTO`movie_detail_tab`(VIDEO_ID,PLAY_URL)SELECTb.IDASVIDEO_ID,x.playurlASPLAY_URLFROM(SELECTa.playurl,CONCAT(a.`卡通名`,a.`第几集`)AS’videoCname’FROM(SELECTplayurl,SUBSTRING_I…

    2022年10月5日
    0
  • Haar特征提取算法的实现

    Haar特征提取算法的实现自己动手 丰衣食足 系列 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Haar 特征是一种很早就被提出的图像特征提取算法 后面还经过了几次改进 Haar 特征能够很好地运用于人脸识别技术 当然很多目标检测技术中对目标图像的特征提取也可以使用 Haar 特征 当我们使用 opencv 自带的 cascade 分类器时可以选择 Haar 特征作为训练样本数据的特征描述子 然后将特征描述子作为样本数据送入 cascade 分类器中 就可以通过 Adab

    2025年7月10日
    0
  • JS 为对象添加属性的方法

    JS 为对象添加属性的方法常用数组添加的方式是 push 那么动态为对象添加属性该用什么方式呢 varobj obj name aaa obj age 22 console log obj obj name aaa age 22

    2025年7月22日
    2
  • java 反编译器_代码反编译到数据库

    java 反编译器_代码反编译到数据库xjad反编译工具下载使用反编译时把class文件直接拖拽至工具内即可,如果反编译结果不对时把class文件重新去拿原始的不要编辑打开,或者放在一个文件夹内在试。反编译后的代码没有注释、注解等,反正能用得细心看看调整。点击下载工具http://a.xzfile.com/down2/XJadfanbinayi_downcc.zip…

    2022年8月20日
    4
  • HDFS存储大量小文件居然有这样的问题!看我怎么搞定它!「建议收藏」

    HDFS存储大量小文件居然有这样的问题!看我怎么搞定它!「建议收藏」写在前面本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系解答HDFS存储大量小文件有什么问题?小文件是指文件大小小于HDFS上Block大小的文件。这样的文件会给Hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何Block、文件或者目录在内存中均以对象的形式存储,每个对象约占150Byte。如果有100000个小文件,每

    2022年5月20日
    117

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号