opencv-py-基础操作

文章目录

阈值分割

灰度图

python 复制代码
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)

效果

二值化

python 复制代码
# 阈值分割 二值化 超出阈值取maxvalue,否则取0
ret,thresh1 = cv.threshold(grayImg,100,255,cv.THRESH_BINARY)
bf.cv_show("THRESH_BINARY",thresh1)

效果

二值化取反

python 复制代码
# 阈值分割 二值化取反  超出阈值取0,否则取maxvalue
ret,thresh2 = cv.threshold(grayImg,100,255,cv.THRESH_BINARY_INV)
bf.cv_show("THRESH_BINARY_INV",thresh2)

效果

截取

python 复制代码
# 阈值分割 截取  超过阈值的部分设置成阈值,否则不变(第三个参数没用,但是必须有,随便给个数值就行)
ret,thresh3 = cv.threshold(grayImg,100,0,cv.THRESH_TRUNC)
bf.cv_show("THRESH_TRUNC",thresh3)

效果

TOZERO

python 复制代码
# 阈值分割 TOZERO  超过阈值的部分设置成0,否则不变(第三个参数没用,但是必须有,随便给个数值就行)
# 让超出阈值的部分变得更黑,边缘更清晰
ret,thresh4 = cv.threshold(grayImg,100,255,cv.THRESH_TOZERO)
bf.cv_show("THRESH_TRUNC",thresh4)

效果

TOZERO取反

python 复制代码
# 阈值分割 TOZERO_INV  超过阈值的部分不变,否则设置成0(第三个参数没用,但是必须有,随便给个数值就行)
# 让小于阈值的部分变得更黑,边缘更清晰
ret,thresh4 = cv.threshold(grayImg,100,255,cv.THRESH_TOZERO_INV)
bf.cv_show("THRESH_TRUNC",thresh4)

效果

滤波

均值滤波

python 复制代码
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)

高斯滤波

python 复制代码
# 高斯滤波
# sigmaX和sigmaY参数控制了高斯核函数在X和Y方向上的标准差,标准差越大,意味着像素值的变化范围越大,从而使得高斯核的权重分布范围更广,影响范围更大。
# 当sigmaX和sigmaY的值较小时,高斯核的权重主要集中在中心像素周围,这样可以保留更多的细节信息,图像看起来更加清晰。
# 相反,当sigmaX和sigmaY的值较大时,高斯核的权重分布范围更广,会模糊图像,因为更多的像素被纳入平滑处理,从而导致图像变得模糊。
# 因此,通过调节sigmaX和sigmaY的值,可以控制高斯滤波的平滑程度和模糊效果,以适应不同的图像处理需求。
gus = cv.GaussianBlur(source,(5,5),5)
bf.cv_show("gus",gus)

中值滤波

python 复制代码
# 中值滤波
# 特别适合处理图像中的椒盐噪点
middle =  cv.medianBlur(source,5)
bf.cv_show("middle",middle)

图像拼接

简单的横向和纵向拼接

python 复制代码
# 直接拼接(横向)
all = cv.hconcat([blur,gus,middle])
bf.cv_show("all",all)
# 直接拼接(纵向)
allv = cv.vconcat([blur,gus,middle])
bf.cv_show("allv",allv)

效果(三幅图片分别是均值滤波,高斯滤波,中值滤波)

腐蚀与膨胀

python 复制代码
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)
相关推荐
jinxindeep15 小时前
CVPR26最佳论文提名:NitroGen,面向通用游戏智能体的 视觉-动作基础模型
人工智能·游戏
小雨下雨的雨18 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
我没胡说八道21 小时前
高校论文AI检测优化工具对比研究与实测分析(2026)
人工智能·深度学习·机器学习·计算机视觉·aigc·论文
秦亚伟21 小时前
AI浪潮重塑融资租赁行业新格局
人工智能
love530love21 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
元启数宇21 小时前
喷淋AI布点实战:8小时人工布点→20分钟自动出图
人工智能
哈哈,柳暗花明21 小时前
人工智能专业术语详解(H)
人工智能·专业术语
圣殿骑士-Khtangc21 小时前
AI 编程工具 2026 实战横评:Cursor 3 vs Claude Code vs Copilot,开发者选型完全指南
人工智能·copilot
云器科技21 小时前
云器Lakehouse 2026年5月版本发布:拥抱 AI Agent,重塑数据智能开发新范式
人工智能
小鹰-上海鹰谷-电子实验记录本21 小时前
第六届党建引领科创生态座谈会 | 邓光辉博士出席分享AI赋能创新药科研新范式
人工智能·ai·电子实验记录本·药企合规