这篇“OpenCV图像的二值化怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“OpenCV图像的二值化怎么实现”文章吧。
图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
import cv2 img = cv2.imread('img/lena.jpg') # 转为灰度图 new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) height, width = new_img.shape[0:2] # 设置阈值 thresh = 60 # 遍历每一个像素点 for row in range(height): for col in range(width): # 获取到灰度值 gray = new_img[row, col] # 如果灰度值高于阈值 就等于255最大值 if gray > thresh: new_img[row, col] = 255 # 如果小于阈值,就直接改为0 elif gray < thresh: new_img[row, col] = 0 cv2.imshow('img', new_img) cv2.waitKey()
threshold()方法参数:
图片矩阵
阈值
图片中的最大值
二值化的方式
二值化的方式:
THRESH_BINARY | 高于阈值改为255,低于阈值改为0 |
---|---|
THRESH_BINARY_INV | 高于阈值改为0,低于阈值改为255 |
THRESH_TRUNC | 截断,高于阈值改为阈值,最大值失效 |
THRESH_TOZERO | 高于阈值不改变,低于阈值改为0 |
THRESH_TOZERO_INV | 高于阈值该为0,低于阈值不改变 |
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY) print(thresh) cv2.imshow('img', img) cv2.imshow('NEW_IMG', new_img) cv2.waitKey()
使用一个全局值作为阈值。但是在所有情况下这可能都不太好。
如果图像在不同区域具有不同的照明条件。
在这种情况下,自适应阈值阈值可以帮助。这里,算法基于其周围的小区域确定像素的阈值。
因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同照明的图像提供了更好的结果。
adaptlive()方法参数:
1.图片矩阵
2.图片灰度最大值
3.计算阈值的方法
4.阈值类型
5.处理块大小
6.算法所用的常量C
cv2.ADAPTIVE_THRESH_MEAN_C
:该阈值是该附近区域减去恒定的平均Ç。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C
:阈值是邻域值减去常数C的高斯加权和。
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5) cv2.imshow('thresh_img', thresh_img) cv2.waitKey()
图像分割中阈值选取的最佳算法
threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) # 使用255的阈值进行二值化 ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY) cv2.imshow('normal', thresh_img) # 使用高斯滤波模糊图像 参数1: 图片矩阵 参数2:卷积核 参数3: 越大越模糊 gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) cv2.imshow('gaussian_img', gaussian_img) # 使用大津算法0阈值二值化经过高斯滤波模糊后的图像 ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) cv2.imshow('otsu', thresh_img) cv2.imshow('img', img) cv2.waitKey()
以上就是关于“OpenCV图像的二值化怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。