每次做了什么东西很容易遗忘,希望能够坚持积累下去!!!
基本流程:
一、 cv2.treshold(src,tresh,maxval,type)函数
参数说明:src表示输入的图片, thresh表示阈值, maxval表示最大值, type表示阈值的类型
type的类型:
(1)cv2.THRESH_BINARY 表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示
(2)cv2.THRESH_BINARY_INV 表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示
(3)cv2.THRESH_TRUNC 表示进行截断操作,大于阈值的使用阈值表示,小于阈值的
(4) cv2.THRESH_TOZERO 表示进
行化零操作,大于阈值的不变,小于阈值的使用
(5)v2.THRESH_TOZERO_INV 表示进行化零操作的翻转,大于阈值的使用0表示,小于阈值的不变
二、cv2.findContours()函数
参考:https://blog.csdn.net/yegeli/article/details/107414983?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
讲解的很详细
三、cv2.boundingRect()函数
参考:https://blog.csdn.net/fu6543210/article/details/79935358
四、cv2.drawContours()函数
参考:https://blog.csdn.net/yegeli/article/details/107414983?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
程序:
import cv2
import numpy as np
import os
root = "./no_noize"
file_list = os.listdir(root)
for filename in file_list:
im1 = cv2.imread(root + "/" + filename, 0)
# 对图像进行二值化,提取轮廓
ret, binary = cv2.threshold(im1, 100, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
# 找出最大轮廓
# print(len(contours))
max_local = 0
for i in range(len(contours)):
if contours[i].shape[0] > contours[max_local].shape[0]:
max_local = i
# 找出最大轮廓的定点及边长,绘制矩形包围框
x, y, w, h = cv2.boundingRect(contours[max_local])
im2 = cv2.imread(root + "/" + filename, 1)
brcnt = np.array([[[x, y]], [[x + w, y]], [[x + w, y + h]],[[x, y + h]]])
im_cnt = cv2.drawContours(im2, # 绘制图像
[brcnt], # 轮廓点列表
-1, # 绘制全部轮廓
(0, 0, 255), # 轮廓颜色:红色
2) # 轮廓粗细
cv2.imshow("result",im_cnt)
cv2.waitKey()
cv2.destroyAllWindows()