opencv学习记录之阈值处理

阈值处理是指将图像内高于一定值或者低于一定值的像素点进行处理

函数形式为:

retval ,dst = cv2.thresshold( src , thresh , maxval , type )

retval代表返回的阈值

dst代表阈值分割结果图像,与原始图像有相同的大小和类型

src代表要进行分割的图像,可以是多通道的

thresh代表要设定的阈值

maxval代表当type为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值

type代表阈值分割的类型

具体类型如下

二值化阈值处理(cv2.THRESH_BINARY)

处理之后图像为只有两个值的二值图像

对于8位灰度图像,将超过阈值thresh的值处理为最大值255,低于阈值的处理位0

1 import cv2
2 import numpy as np
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
5 print("img=\n",img)
6 print("t=",t)
7 print("rst=\n",rst)
img=
 [[ 98 151  50 196 238]
 [ 45  64 225 227 204]
 [ 45  19  46 233  82]
 [122 103  64 182 218]]
t= 127.0
rst=
 [[  0 255   0 255 255]
 [  0   0 255 255 255]
 [  0   0   0 255   0]
 [  0   0   0 255 255]]

反二值化阈值处理(cv2.THRESH_BINARY_INV)

处理后的图像也是只有两个值的二值图像,

将灰度值大于阈值thresh的像素点,将其值处理为0,低于的处理为255

1 import cv2
2 import numpy as np
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
5 print("img=\n",img)
6 print("t=",t)
7 print("rst=\n",rst)
img=
 [[161 182 120 192 159]
 [ 64 197 108 242 182]
 [237 203   8 206  67]
 [ 31   7 190 226  22]]
t= 127.0
rst=
 [[  0   0 255   0   0]
 [255   0 255   0   0]
 [  0   0 255   0 255]
 [255 255   0   0 255]]

截断阈值化处理(cv2.THRESH_TRUNC)

对于像素值大于阈值thresh的值将其处理为阈值的值,小于阈值的值保持不变

import cv2
import numpy as np
img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
t,rst=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
print("img=\n",img)
print("t=",t)
print("rst=\n",rst)
img=
 [[ 31 121 210 126 117]
 [ 17 144  78  31 193]
 [ 91 143  27  58 103]
 [203 216 151 176  30]]
t= 127.0
rst=
 [[ 31 121 127 126 117]
 [ 17 127  78  31 127]
 [ 91 127  27  58 103]
 [127 127 127 127  30]]

超阈值零处理(cv2.THRESH_TOZERO_INV)

超阈值零处理会将图像中大于阈值的像素点的值处理为0,小于或等于该阈值的像素点的值保持不变

1 import cv2
2 import numpy as np
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
5 print("img=\n",img)
6 print("t=",t)
7 print("rst=\n",rst)
img=
 [[209 180 150 127  21]
 [ 11 227   7 223 211]
 [218  84  90  32  61]
 [101 129 240  36 176]]
t= 127.0
rst=
 [[  0   0   0 127  21]
 [ 11   0   7   0   0]
 [  0  84  90  32  61]
 [101   0   0  36   0]]

低阈值值零处理(cv2.THRESH_TOZERO)

低阈值处理会将图像中小于或等于阈值的像素点的值处理为0,大于阈值的像素点的值保持不变

1 import cv2
2 import numpy as np
3 img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
4 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
5 print("img=\n",img)
6 print("t=",t)
7 print("rst=\n",rst)
img=
 [[249  40  83  55 210]
 [195 144 246 163 230]
 [ 41 124  16 209   5]
 [ 48 177 190 118  75]]
t= 127.0
rst=
 [[249   0   0   0 210]
 [195 144 246 163 230]
 [  0   0   0 209   0]
 [  0 177 190   0   0]]

原文地址:https://www.cnblogs.com/miaorn/p/12207214.html

时间: 2024-11-13 09:00:55

opencv学习记录之阈值处理的相关文章

opencv学习记录之模板匹配

模板匹配是指在图像A中寻找与图像B最相似的部分,一般A称为输入图像,B称为模板图像 模板匹配函数 result = cv2.matchTemplate(image , temp1 , method , [,mask]) result 函数每次计算模板和输入图像的重叠区域相似度之后将结果存入映射图像result中, result图像中每个点都代表一次相似度的比较,类型是单通道32位浮点型 若输入图像的尺寸位W×H,模板图像为w×h,则返回值为(W-w+1)×(H-h+1) 模板在原始图像上遍历,左

【opencv学习记录】以迭代器方式访问图像像素,统计像素信息存入文件

opencv2.4.9,练习使用图像迭代器访问像素值+STL中的vector #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <iostream> #include <fstream> using namespace std; using namespace

opencv学习记录

1 #include<iostream> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 using namespace cv; 1 Mat img4 = imread("LinuxLogo.jpg"); 2 // 创建画"窗口 3 namedWindow("4"); 4 // 在窗口中显示游戏原画 5 imsho

opencv学习记录之图像运算

图像的运算可以是十进制的值运算也可以是二进制的位逻辑运算 一.图像加法运算 1 import cv2 2 import numpy as np 3 img1 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 4 img2 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 5 img3 = cv2.add(img1,img2) 6 print("img1 =\

opencv学习记录之几何变换

------------恢复内容开始------------ 几何变换是指将一幅图像映射到另外一幅图像内的操作 一.缩放 函数具体形式为 dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) dst代表输出的目标图像,类型与src相同,大小为dsize 或可以通过src.size() ,fx,fy计算得到 src代表需要缩放的原始图像 dsize代表输出图像大小 fx表示水平方向的缩放比例 fy表示垂直方向的缩放比例 i

opencv学习记录之形态学操作

腐蚀和膨胀是形态学运算的基础,将腐蚀和膨胀进行组合运算,通过不同的组合可以实现不同的效果,需要自行开发则可以实现开运算,闭运算,形态学梯度运算,礼帽运算 黑帽运算,击中击不中运算等不同形式的运算 函数形式 dst = cv2.morphologyEx( src , op , kernel [ , anchor [ , interations [, borderType [ , borderValue]]]]) dst 形态学操作之后的图像,与原图像类型大小相同 src需要操作的图像,与之腐蚀和膨

OpenCV学习笔记[5]FLANN特征匹配

OpenCV学习笔记:FLANN特征匹配 本次给出FLANN特征匹配的Java实现. [简介] 特征匹配记录下目标图像与待匹配图像的特征点(KeyPoint),并根据特征点集合构造特征量(descriptor),对这个特征量进行比较.筛选,最终得到一个匹配点的映射集合.我们也可以根据这个集合的大小来衡量两幅图片的匹配程度. 特征匹配与模板匹配不同,由于是计算特征点集合的相关度,转置操作对匹配影响不大,但它容易受到失真.缩放的影响. [特征匹配] FeatureMatching.java: imp

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s

OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)

昨天刚刚考完编译原理,私心想着可以做一些与考试无关的东西了.一直想做和图像处理相关的东西,趁这段时间有空学习一下OpenCV,搭建环境真是一件麻烦的事情,搞了近三个小时终于OK了.先来张图: 大致描述一下步骤吧: 一.安装前准备 1.VS2012(网上看到很多用的VS2010,但是基本不影响) 2.OpenCV 安装包(我下载的是最新的2.4.9) 二.安装OpenCV 1.解压OPenCV 说是安装,其实就是解压,OpenCV的Windows安装程序就是一个自解压程序: 这里我解压到C:\Pr