【Python】【OpenCV】边缘检测和创建自定义核
1.【Python】【ChatGPT】本地部署ChatGPT学习记录2.【Python】【OpenCV】【NumPy】图像和原始字节的转换3.【Python】【OpenCV】【NumPy】图像数据的访问4.【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示5.【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧
6.【Python】【OpenCV】边缘检测和创建自定义核
7.【Python】【OpenCV】轮廓检测8.【Python】【OpenCV】绘制外接矩形、外接圆9.【Python】【OpenCV】凸轮廓和Douglas-Peucker算法10.【Python】【OpenCV】检测直线和圆11.【Python】【OpenCV】定位条形码(一)12.【Python】【OpenCV】定位条形码(二)moments和HuMoments13.【Python】【OpenCV】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)14.【Python】【OpenCV】定位二维码15.【Python】【OpenCV】OCR识别(一)——目标区域定位16.【Python】【OpenCV】OCR识别(二)——透视变换17.【Python】【OpenCV】OCR识别(三)——字符识别对于使用OpenCV已有的算子,我们还可以自定义卷积核以达到不同的效果。
filters.py
1 import cv2 2 import numpy 3 4 """ 定义滤波器和类 """ 5 6 7 def strokeEdges(src, dst, blurKsize=7, edgeKsize=5): 8 if blurKsize >= 3: 9 blurredSrc = cv2.medianBlur(src, blurKsize) 10 graySrc = cv2.cvtColor(blurredSrc, cv2.COLOR_BGR2GRAY) 11 else: 12 graySrc = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) 13 cv2.Laplacian(graySrc, cv2.CV_8U, graySrc, edgeKsize) 14 normalizedInverseAlpha = (1.0 / 255) * (255 - graySrc) 15 channels = cv2.split(src) 16 for channel in channels: 17 channel[:] = channel * normalizedInverseAlpha 18 cv2.merge(channels, dst) 19 20 21 class VConvolutionFilter: 22 """ 卷积滤波 """ 23 def __init__(self, kernel): 24 self._kernel = kernel 25 26 def apply(self, src, dst): 27 cv2.filter2D(src, -1, self._kernel, dst) 28 29 30 class SharpenFilter(VConvolutionFilter): 31 """ 锐化 """ 32 def __init__(self): 33 kernel = numpy.array( 34 [ 35 [-1, -1, -1], 36 [-1, 9, -1], 37 [-1, -1, -1] 38 ] 39 ) 40 VConvolutionFilter.__init__(self, kernel) 41 42 43 class FindEdgesFilter(VConvolutionFilter): 44 """ 边缘检测 """ 45 def __init__(self): 46 kernel = numpy.array( 47 [ 48 [-1, -1, -1], 49 [-1, 8, -1], 50 [-1, -1, -1] 51 ] 52 ) 53 VConvolutionFilter.__init__(self, kernel) 54 55 56 class BlurFilter(VConvolutionFilter): 57 """ 模糊滤波 """ 58 def __init__(self): 59 kernel = numpy.array( 60 [ 61 [0.04, 0.04, 0.04, 0.04, 0.04], 62 [0.04, 0.04, 0.04, 0.04, 0.04], 63 [0.04, 0.04, 0.04, 0.04, 0.04], 64 [0.04, 0.04, 0.04, 0.04, 0.04], 65 [0.04, 0.04, 0.04, 0.04, 0.04], 66 ] 67 ) 68 VConvolutionFilter.__init__(self, kernel) 69 70 71 class EmbossFilter(VConvolutionFilter): 72 """ 浮雕 """ 73 def __init__(self): 74 kernel = numpy.array( 75 [ 76 [-2, -1, 0], 77 [-1, -1, 1], 78 [0, 1, 2] 79 ] 80 ) 81 VConvolutionFilter.__init__(self, kernel)
将filter.py文件导入cameo,py自行调用
关于卷积核权值总和:
当总和 <1 时,代表图片整体的亮度变暗
当总和 =1 时,代表图片的整体亮度不发生变化
当总和 >1 时,代表图片的整体亮度变亮、
上述总和值,一般都是通过中心点的值做最后的差值,从而达到图片整体明暗的变换。
strokeEdges方法解析:
1、先将当前帧转换为灰度图
2、再使用Laplace算子进行边缘提取——边缘既是前景像素,也就是我们感兴趣区域,而其余像素都是背景像素,Laplace会将前景像素灰度级置为接近255,而背景则置为接近0
3、计算反向透明度(Alpha,阈值在0-1之间),先将前景像素使用255进行减法操作,然后再去和归一化因子进行乘积,从而得到每一个像素点的Alpha值
4、分离通道,Alpha和RBG即三个颜色通道是对应的,即每个通道都有Alpha属性,所以需要分离通道后单独操作,进而实现 描边 的效果
5、将分离的通道重新合并在一起并输出为图像
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)