14_Sobel算子、Scharr算子与Laplacian算子
# Sobel算子、Scharr算子与Laplacian算子 # 1. Sobel算子 # 1.1 圆形处理(例) import cv2 # opencv的缩写为cv2 import matplotlib.pyplot as plt # matplotlib库用于绘图展示 import numpy as np # numpy数值计算工具包 pie = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/06_pie.png') # 读取图像 cv2.imshow('img', pie) cv2.waitKey() cv2.destroyAllWindows() # 梯度就是边界点,左边右边不一样 def cv_show(img, name): cv2.imshow(name, img) cv2.waitKey() cv2.destroyAllWindows() # 白到黑是正数,黑到白是负数了,所有的负数会被截断成 0,所以要取绝对值 sobelx = cv2.Sobel(pie, cv2.CV_64F, 1, 0, ksize=3) # 1,0 表示只算水平方向梯度 cv_show(sobelx, 'sobelx') sobelx = cv2.Sobel(pie, cv2.CV_64F, 1, 0, ksize=3) sobelx = cv2.convertScaleAbs(sobelx) # 取负数时,取绝对值 cv_show(sobelx, 'sobelx') sobely = cv2.Sobel(pie, cv2.CV_64F, 0, 1, ksize=3) # 1,0 只算 y 方向梯度 sobely = cv2.convertScaleAbs(sobely) # 取负数时,取绝对值 cv_show(sobely, 'sobely') # 计算 x 和 y 后,再求和 sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0) # 0是偏置项 cv_show(sobelxy, 'sobelxy') # 不建议直接计算,还有重影 sobelxy = cv2.Sobel(pie, cv2.CV_64F, 1, 1, ksize=3) sobelxy = cv2.convertScaleAbs(sobelxy) cv_show(sobelxy, 'sobelxy') # 1.2 人照处理(例) img = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) cv_show(img, 'img') img = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) sobelx = cv2.convertScaleAbs(sobelx) sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) sobely = cv2.convertScaleAbs(sobely) sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0) img1 = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) sobelxy1 = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3) sobelxy1 = cv2.convertScaleAbs(sobelxy1) res = np.hstack((sobelxy, sobelxy1)) cv_show(res, 'sobelxy') # 整体计算有重影和模糊,不建议整体计算 img = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) sobelxy = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3) sobelxy = cv2.convertScaleAbs(sobelxy) cv_show(sobelxy, 'sobelxy') # 2. Scharr算子 # 3. Laplacian算子 # 4. 各个算子区别 img = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) cv_show(img, 'img') # 不同算子的差异 img = cv2.imread('D:/pycharm/pycharm-cope/opencv/resource/photo/07_Lena.jpg', cv2.IMREAD_GRAYSCALE) sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) sobelx = cv2.convertScaleAbs(sobelx) sobely = cv2.convertScaleAbs(sobely) sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0) scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0) scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1) scharrx = cv2.convertScaleAbs(scharrx) scharry = cv2.convertScaleAbs(scharry) scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0) laplacian = cv2.Laplacian(img, cv2.CV_64F) # 没有 x、y,因为是求周围点的比较 laplacian = cv2.convertScaleAbs(laplacian) res = np.hstack((sobelxy, scharrxy, laplacian)) cv_show(res, 'res')
结果展示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律