阈值分割
灰度图
import cv2 as cv
import numpy as np
import os
import base_function as bf
sourceImg = cv.imread("static/26.png")
# bf.cv_show("source",sourceImg)
grayImg = cv.cvtColor(sourceImg,cv.COLOR_BGR2GRAY)
bf.cv_show("grayImg",grayImg)
效果
二值化
# 阈值分割 二值化 超出阈值取maxvalue,否则取0
ret,thresh1 = cv.threshold(grayImg,100,255,cv.THRESH_BINARY)
bf.cv_show("THRESH_BINARY",thresh1)
效果
二值化取反
# 阈值分割 二值化取反 超出阈值取0,否则取maxvalue
ret,thresh2 = cv.threshold(grayImg,100,255,cv.THRESH_BINARY_INV)
bf.cv_show("THRESH_BINARY_INV",thresh2)
效果
截取
# 阈值分割 截取 超过阈值的部分设置成阈值,否则不变(第三个参数没用,但是必须有,随便给个数值就行)
ret,thresh3 = cv.threshold(grayImg,100,0,cv.THRESH_TRUNC)
bf.cv_show("THRESH_TRUNC",thresh3)
效果
TOZERO
# 阈值分割 TOZERO 超过阈值的部分设置成0,否则不变(第三个参数没用,但是必须有,随便给个数值就行)
# 让超出阈值的部分变得更黑,边缘更清晰
ret,thresh4 = cv.threshold(grayImg,100,255,cv.THRESH_TOZERO)
bf.cv_show("THRESH_TRUNC",thresh4)
效果
TOZERO取反
# 阈值分割 TOZERO_INV 超过阈值的部分不变,否则设置成0(第三个参数没用,但是必须有,随便给个数值就行)
# 让小于阈值的部分变得更黑,边缘更清晰
ret,thresh4 = cv.threshold(grayImg,100,255,cv.THRESH_TOZERO_INV)
bf.cv_show("THRESH_TRUNC",thresh4)
效果
滤波
均值滤波
from math import fabs
import cv2 as cv
import numpy as np
import base_function as bf
source = cv.imread("static/1.png")
cv.imshow("source",source)
cv.waitKey(1000)
cv.destroyAllWindows()
blur = cv.blur(source,(5,5))
bf.cv_show("blur",blur)
高斯滤波
# 高斯滤波
# sigmaX和sigmaY参数控制了高斯核函数在X和Y方向上的标准差,标准差越大,意味着像素值的变化范围越大,从而使得高斯核的权重分布范围更广,影响范围更大。
# 当sigmaX和sigmaY的值较小时,高斯核的权重主要集中在中心像素周围,这样可以保留更多的细节信息,图像看起来更加清晰。
# 相反,当sigmaX和sigmaY的值较大时,高斯核的权重分布范围更广,会模糊图像,因为更多的像素被纳入平滑处理,从而导致图像变得模糊。
# 因此,通过调节sigmaX和sigmaY的值,可以控制高斯滤波的平滑程度和模糊效果,以适应不同的图像处理需求。
gus = cv.GaussianBlur(source,(5,5),5)
bf.cv_show("gus",gus)
中值滤波
# 中值滤波
# 特别适合处理图像中的椒盐噪点
middle = cv.medianBlur(source,5)
bf.cv_show("middle",middle)
图像拼接
简单的横向和纵向拼接
# 直接拼接(横向)
all = cv.hconcat([blur,gus,middle])
bf.cv_show("all",all)
# 直接拼接(纵向)
allv = cv.vconcat([blur,gus,middle])
bf.cv_show("allv",allv)
效果(三幅图片分别是均值滤波,高斯滤波,中值滤波)
文章来源:https://www.toymoban.com/news/detail-793355.html
腐蚀与膨胀
import cv2 as cv
import base_function as bf
import numpy as np
# --- 字体设置 ---
position = (10, 50) # 左上角起始点的坐标
font = cv.FONT_HERSHEY_SIMPLEX
scale = 1
color = (255, 255, 255) # BGR颜色值(白色)
thickness = 2
# --- end字体设置 ---
source = cv.imread("static/26.png")
gray = cv.cvtColor(source,cv.COLOR_BGR2GRAY)
# bf.cv_show("gray",gray)
kernel = np.ones((7,7),np.uint8)
#二值化取反
ret,binary = cv.threshold(gray,100,255,cv.THRESH_BINARY_INV)
# 腐蚀图片
erode = cv.erode(binary,kernel,iterations=1)
# bf.cv_show("erode",erode)
# 膨胀图片
dilate = cv.dilate(erode,kernel,iterations=1)
# 开运算 先腐蚀后膨胀
open = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
# 闭运算 先膨胀后腐蚀
close = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
cv.putText(gray,"gray",position,font,scale,color,thickness)
cv.putText(binary,"binary",position,font,scale,color,thickness)
cv.putText(erode,"erode",position,font,scale,color,thickness)
cv.putText(dilate,"dilate",position,font,scale,color,thickness)
cv.putText(open,"open",position,font,scale,color,thickness)
cv.putText(close,"close",position,font,scale,color,thickness)
all =np.vstack((np.hstack((gray,binary,erode)) ,np.hstack((dilate,open,close))))
bf.cv_show("all",all)
文章来源地址https://www.toymoban.com/news/detail-793355.html
到了这里,关于opencv-py-基础操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!