OpenCV-Python系列—— 图像处理(灰度图二值化边缘检测高斯模糊轮廓检测)
Posted 云霄IT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-Python系列—— 图像处理(灰度图二值化边缘检测高斯模糊轮廓检测)相关的知识,希望对你有一定的参考价值。
一、【灰度图、二值化】
import cv2
img = cv2.imread("lz2.png")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图
# 二值化,(127,255)为阈值
retval,bit_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('photo1',img)
cv2.imshow('photo2',gray_img)
cv2.imshow('photo3',bit_img)
cv2.waitKey(0)
二、【边缘检测】
import cv2
img = cv2.imread("l2.png")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图
img_b = cv2.Canny(img, 38,180,apertureSize=3) # (38,180)为阈值
img_c = cv2.Canny(img, 38,180,apertureSize=5)
cv2.imshow('photo1',img)
cv2.imshow('photo2',img_b)
cv2.imshow('photo3',img_c)
cv2.waitKey(0)
三、高斯滤波
import cv2
img = cv2.imread("lz2.png")
# 高斯滤波
blurred = cv2.GaussianBlur(img, (21, 21), 0) #(21,21)越高越模糊,只能设置为奇数
cv2.imshow('photo1',img)
cv2.imshow('photo2',blurred)
cv2.waitKey(0)
四、【轮廓检测】
【方法一:步骤】
第一步:载入图片
第二步:使用cv2.cvtcolor() 将图片转换为灰度图
第三步: 使用cv2.threshold将图片做二值化转换
第四步:使用cv2.findContours 找出图片的轮廓值
第五步:使用cv2.drawContours在图片上画上轮廓
第六步: 使用cv2.imshow 显示
import cv2
# 第一步,读入照片
img = cv2.imread("lz2.png")
contours_img = img.copy()
# 第二步,转灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图
# 第三步,二值化处理
retval,bit_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) # 高斯滤波-去除噪音
# 第四步,寻找轮廓
cnts, hierarchy = cv2.findContours(bit_img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 第五步,绘画轮廓
ret_img = cv2.drawContours(contours_img, cnts, -1, (0, 0, 255), 3)
# 显示图片
cv2.imshow('photo',ret_img)
cv2.waitKey(0)
【方法二:步骤】
第一步,读入照片 cv2.imread()
第二步,转灰度图 cv2.cvtColor()
第三步,高斯去噪 cv2.GaussianBlur()
第四步,边缘检测 cv2.Canny()
第五步,寻找轮廓 cv2.findContours()
第六步,绘画轮廓 cv2.drawContours()
import cv2
# 第一步,读入照片
img = cv2.imread("lz2.png")
contours_img = img.copy()
# 第二步,转灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图
# 第三步,高斯去噪
blurred_img = cv2.GaussianBlur(gray_img, (5, 5), 0) # 高斯滤波-去除噪音
# 第四步,边缘检测
edged_img = cv2.Canny(blurred_img, 75, 200) # Canny算子边缘检测
# 第五步,寻找轮廓
cnts, hierarchy = cv2.findContours(edged_img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 第六步,绘画轮廓
ret_img = cv2.drawContours(contours_img, cnts, -1, (0, 0, 255), 3)
# 显示图片
cv2.imshow('photo5',ret_img)
cv2.waitKey(0)
以上是关于OpenCV-Python系列—— 图像处理(灰度图二值化边缘检测高斯模糊轮廓检测)的主要内容,如果未能解决你的问题,请参考以下文章
opencv-python图像处理 ---直方图与傅里叶变换逆变换
OpenCV-Python调整图像对比度和带文字白纸照片背景漂白方法