opencv进阶学习笔记10:图像金字塔和图像梯度
程序员文章站
2024-01-03 23:48:04
基础版笔记传送门:python3+opencv学习笔记汇总目录(适合基础入门学习)图像金字塔变小变大原理见基础版链接,基础版图像金字塔讲解:opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)向下取样实现,变小dst=cv2.pyrDown(src)dst:取样结果src:原始图像import cv2 as cvimport numpy as npdef pyramid_demo(image): level = 3 temp =...
基础版笔记传送门:
python3+opencv学习笔记汇总目录(适合基础入门学习)
图像金字塔
变小
变大
原理见基础版链接,
基础版图像金字塔讲解:
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)
向下取样实现,变小
dst=cv2.pyrDown(src)
dst:取样结果
src:原始图像
import cv2 as cv
import numpy as np
def pyramid_demo(image):
level = 3
temp = image.copy()
pyramid_images = []
for i in range(level):
dst = cv.pyrDown(temp)
pyramid_images.append(dst)
cv.imshow("pyramid_down_"+str(i), dst)
temp = dst.copy()
return pyramid_images
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("duoren.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
c=pyramid_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
拉普拉斯金字塔图像金字塔
结果=原始图像-先向下再向上
向下:尺寸变小
向上:尺寸变大
import cv2 as cv
import numpy as np
def pyramid_demo(image):
level = 3
temp = image.copy()
pyramid_images = []
for i in range(level):
dst = cv.pyrDown(temp)
pyramid_images.append(dst)
#cv.imshow("pyramid_down_"+str(i), dst)
temp = dst.copy()
return pyramid_images
def lapalian_demo(image):
pyramid_images = pyramid_demo(image)#首先得到高斯金字塔结果
level = len(pyramid_images)
for i in range(level-1, -1, -1):#从小图到大图
if (i-1) < 0 :#最后一层特殊处理
expand = cv.pyrUp(pyramid_images[i], dstsize=image.shape[:2])
lpls = cv.subtract(image, expand)
cv.imshow("lapalian_down_" + str(i), lpls)
else:
expand = cv.pyrUp(pyramid_images[i], dstsize=pyramid_images[i-1].shape[:2])
lpls = cv.subtract(pyramid_images[i-1], expand)
cv.imshow("lapalian_down_"+str(i), lpls)
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("lena.png")#图必须要是2的N次倍数
#src=cv.resize(src,(512,512))
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
lapalian_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
注意图像尺寸必须是2的倍数,否则报错
错误信息如下
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\pyramids.cpp:923: error: (-215:Assertion failed) std::abs(dsize.width - ssize.width*2) == dsize.width % 2 && std::abs(dsize.height - ssize.height*2) == dsize.height % 2 in function 'cv::pyrUp_'
图像梯度
基础讲解
opencv学习笔记15: 梯度运算之sobel算子及其函数使用
opencv学习笔记16:梯度运算之scharr算子及其函数使用
opencv学习笔记17:梯度运算之laplacian算子及其应用
sobel算子理论
如图,图中红色点区域,从头发到皮肤。开先处于头发区域,头发是黑色,像素点,然后处于皮肤,像素相对较高,得到下列图2,对图2求取一阶导师得到图3,可以发现边缘处导数最高。
一阶导数就是做差的意思。
算子和为0
laplacian算子理论
算子和为0
sobel算子实现
import cv2 as cv
import numpy as np
def sobel_demo(image):
grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)
grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)
gradx = cv.convertScaleAbs(grad_x)#取绝对值,并转到8位二进制格式
grady = cv.convertScaleAbs(grad_y)
cv.imshow("gradient-x", gradx)
cv.imshow("gradient-y", grady)
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
cv.imshow("gradient", gradxy)
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("daqiu.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
sobel_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
scharr算子是sobel算子的增强版本。无须再讲,当sobel得到的边缘不是很好时,考虑scharr算子。
laplacian算子实现
import cv2 as cv
import numpy as np
def lapalian_demo(image):
#dst = cv.Laplacian(image, cv.CV_32F)
#lpls = cv.convertScaleAbs(dst)
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("lapalian_demo", lpls)
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("daqiu.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
lapalian_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
说明代码
#dst = cv.Laplacian(image, cv.CV_32F)
#lpls = cv.convertScaleAbs(dst)
等于
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)
电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。
本文地址:https://blog.csdn.net/kobeyu652453/article/details/107353381
推荐阅读
-
opencv进阶学习笔记10:图像金字塔和图像梯度
-
荐 opencv进阶学习笔记3:像素运算和图像亮度对比度调节
-
荐 opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
-
Opencv4 -Python官方教程学习笔记10---图像的几何变换
-
荐 opencv进阶学习笔记3:像素运算和图像亮度对比度调节
-
荐 opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
-
openCV学习笔记(十五) —— 人脸识别 —— 读取摄像头进行人脸图像采集和人脸识别
-
Opencv4 -Python官方教程学习笔记10---图像的几何变换
-
opencv进阶学习笔记10:图像金字塔和图像梯度