赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
参考视频:opencv教学
参考教材:《数字图像处理基础》
我的代码基本是跟着B站的视频里面敲了一遍,然后结合教材对指定区域做了一些加强学习
首先学习一个英文单词:binary。它就是二值化的意思。
我们直接先来一个cv2.threshold()的例子,首先读入一张灰度图:
import cv2
X1=cv2.imread('dog.jpg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
cv2.imshow('origin', X1)
cv2.imshow('binary',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()
里面起到主要作用的就是这句话:
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
稍微解释一下:
1)第一个参数 :输入的需要 转换的图像
2)第二个参数:设定的阈值
3)第三个参数:输入图像的像素最大值(这里是灰度图,所以为255)
4)第四个参数:二值化的类型。除了我们这里用的cv2.THRESH_BINARY(大于阈值的像素点设置为255,小于阈值的点设为0),还有很多种:比如cv2.THRESH_BINARY_INV(大于阈值的像素点设置为0,小于阈值的点设为255)
5)返回两个参数:阈值和二值化图像。调用的时候,两个参数都必须写出来,不然会报错
如下图所示即为第四个参数选择为cv2.THRESH_BINARY_INV(和前面那副图反着来了)
我们分别把阈值设置为32,64,128,196看看他们的效果
import cv2
X1=cv2.imread('dog.jpg',0)
thresh1,img1 = cv2.threshold(X1, thresh=32, maxval=255, type=cv2.THRESH_BINARY)
thresh2,img2 = cv2.threshold(X1, thresh=64, maxval=255, type=cv2.THRESH_BINARY)
thresh3,img3 = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
thresh4,img4 = cv2.threshold(X1, thresh=196, maxval=255, type=cv2.THRESH_BINARY)
cv2.imshow('origin', X1)
cv2.imshow('thresh=32',img1)
cv2.imshow('thresh=64',img2)
cv2.imshow('thresh=128',img3)
cv2.imshow('thresh=196',img4)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()
自适应阈值操作 说白了就是在一个图像中进行多个区域的阈值操作
还是直接看一个例子
import cv2
X1=cv2.imread('dog.jpg',0)
img = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 1)
cv2.imshow('img', X1)
cv2.imshow('adaptiveThreshold', img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()
起作用的是这个函数:cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 1)
1)第一个参数是输入的图像:X1
2)第二个参数是设定的阈值
3)第三个参数:自适应的类型,除这个之外还有ADAPTIVE_THRESH_MEAN_C
4)第四个参数: 二值化的类型
5)第五个参数:分割区域的数量
6)第六个参数: 用以计算的常数
import cv2 X1=cv2.imread('dog.jpg',0) img1 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 1) img2 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 10) img3 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 100) img4 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, -10) img5 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, -100) cv2.imshow('img', X1) cv2.imshow('C=1', img1) cv2.imshow('C=10', img2) cv2.imshow('C=100', img3) cv2.imshow('C=-10', img4) cv2.imshow('C=-100', img5) cv2.waitKey(0) #0为任意键位终止 # cv2.waitKey(1000) #等待1秒 cv2.destroyAllWindows()
import cv2 X1=cv2.imread('dog.jpg',0) img1 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 1) img2 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 7, 1) img3 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, 1) img4 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 1) img5 = cv2.adaptiveThreshold(X1, 127, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 13, 1) cv2.imshow('img', X1) cv2.imshow('blocksize=5', img1) cv2.imshow('blocksize=7', img2) cv2.imshow('blocksize=9', img3) cv2.imshow('blocksize=11', img4) cv2.imshow('blocksize=13', img5) cv2.waitKey(0) #0为任意键位终止 # cv2.waitKey(1000) #等待1秒 cv2.destroyAllWindows()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。