基础版笔记传送门:
python3+opencv学习笔记汇总目录(适合基础入门学习)
进阶版笔记目录链接:
python+opencv进阶版学习笔记目录(适合有一定基础)

图像金字塔

变小

变大

原理见基础版链接,
基础版图像金字塔讲解:
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)
向下取样实现,变小

dst=cv2.pyrDown(src)

dst:取样结果
src:原始图像

import cv2 as cv
import numpy as npdef pyramid_demo(image):level = 3temp = 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 npdef pyramid_demo(image):level = 3temp = 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 npdef 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 npdef 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)

电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。

opencv进阶学习笔记10:图像金字塔和图像梯度相关推荐

  1. opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并

    基础部分传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) Numpy操作图像 1.遍历图像每一 ...

  2. opencv进阶学习笔记3:像素运算和图像亮度对比度调节

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...

  3. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模糊操作 方法:均值模糊,中值模 ...

  4. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  5. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  6. opencv进阶学习笔记11:cannny边缘检测,直线检测,圆检测

    基础版笔记传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) cannny边缘检测 基础版边 ...

  7. opencv进阶学习笔记14:分水岭算法 实现图像分割

    基础版学习笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 分水岭算法原理 分水岭算法 ...

  8. opencv进阶学习笔记12:轮廓发现和对象测量

    基础版笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 轮廓发现 1轮廓发现介绍 基础 ...

  9. opencv进阶学习笔记8:模板匹配

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模板匹配原理 模板匹配(Te ...

最新文章

  1. MindSpore接口mindspore::api
  2. PHP设计模式之组合模式(Composite Pattern)
  3. MYSQL服务的极简免配置快绿色速安装法[适合新手和懒人]
  4. 天河二号 服务器 操作系统,天河二号云服务器
  5. 华为认证数通专家HCIE-Datacom 11月30日发布
  6. Java中怎样根据对象list的某对象的属性进行分组
  7. Oracle之to_char(值,'fm99990.00')
  8. 感知机模型的对偶形式[转载]
  9. 换行符‘\n’和回车符‘\r’
  10. 从基础到实践,一文带你看懂HashMap
  11. 佳能打印机g3800如何安装到计算机,佳能Canon PIXMA G3800 驱动
  12. lnmp 虚拟主机的配置
  13. python dll load fail_python报错DLL load failed:找不到模块怎么解决?
  14. 添加内核驱动模块(1)(mydriver.c+ Konfig+Makefile )
  15. PWM波、方波的输出与捕获
  16. 视觉里程计 matlab实现,基于CarSim和Matlab的智能车辆视觉里程计仿真平台设计
  17. 802.11n HT模式配置说明
  18. 深度模型框架(持续更新)
  19. 用料扎实的全模组电源,还有十年换新支持,安钛克HCG 850体验
  20. JVM参数-XXMatespaceSize的含义

热门文章

  1. 第一阶段:Java基础之变量
  2. IIS+ASP+MySQL8.0+数据库连接解决方案(2019.7)
  3. Long Long Message
  4. [AHOI2009]中国象棋
  5. springboot使用HttpSessionListener监听器统计在线用户数
  6. Hive 0.12.0安装配置
  7. Android Studio 常见插件收藏
  8. ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来
  9. 关于[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object的报错分析
  10. 服务容错设计:流量控制、服务熔断、服务降级