opencv python:图像梯度
2024-10-08 11:05:07
一阶导数与Soble算子
二阶导数与拉普拉斯算子
图像边缘:
Soble算子:
二阶导数:
拉普拉斯算子:
import cv2 as cv
import numpy as np
# 图像梯度(由x,y方向上的偏导数和偏移构成),有一阶导数(sobel算子)和二阶导数(Laplace算子)
# 用于求解图像边缘,一阶的极大值,二阶的零点
# 一阶偏导在图像中为一阶差分,再变成算子(即权值)与图像像素值乘积相加,二阶同理
def sobel_demo(image):
grad_x = cv.Sobel(image, cv.CV_32F, 1, 0) # 采用Scharr边缘更突出
grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)
gradx = cv.convertScaleAbs(grad_x) # 由于算完的图像有正有负,所以对其取绝对值
grady = cv.convertScaleAbs(grad_y)
# 计算两个图像的权值和,dst = src1*alpha + src2*beta + gamma
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("gradx", gradx)
cv.imshow("grady", grady)
cv.imshow("gradient", gradxy)
def laplace_demo(image): # 二阶导数,边缘更细
dst = cv.Laplacian(image,cv.CV_32F)
lpls = cv.convertScaleAbs(dst)
cv.imshow("laplace_demo", lpls)
def custom_laplace(image):
# 以下算子与上面的Laplace_demo()是一样的,增强采用np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)
lpls = cv.convertScaleAbs(dst)
cv.imshow("custom_laplace", lpls)
def main():
src = cv.imread("../images/lena.jpg")
cv.imshow("lena",src)
# sobel_demo(src)
laplace_demo(src)
custom_laplace(src)
cv.waitKey(0) # 等有键输入或者1000ms后自动将窗口消除,0表示只用键输入结束窗口
cv.destroyAllWindows() # 关闭所有窗口
if __name__ == '__main__':
main()
最新文章
- PageRank的java实现
- 疯狂位图之——位图实现12GB无重复大整数集排序
- heredoc 和 nowdoc
- 将U盘分成 启动盘+文件存储区
- NServiceBus-进阶
- SSIS 学习(7):包配置(下)【转】
- axure注册码
- JDBC入门try/catch型
- (转) c# ExecuteNonQuery() 返回值 -1
- Sql 中常用日期转换Convert(Datetime)
- Serv-U无法连接到服务器127.0.0.1,端口43958 FTP服务器不能启动
- 客户端浏览器判断(ios .android)
- linux shadow破解
- 详解<; meta http-equiv = ";X-UA-Compatible"; content = ";IE=edge,chrome=1"; />;
- Alpha冲刺No.6
- FPM五:拆解前面的四——OVP做查询和结果
- 如何用jquery获取form表单的值
- /dev/null 2>;&;1 什么意思
- linux Shell 脚本编写
- [python-opencv]超大图像二值化方法