17.图像金字塔采样(放大,缩小处理)拉普拉斯金字塔
拉普拉斯金子塔只需要了解即可,类似与画出轮廓
import cv2
from matplotlib import pyplot as plt#导入 Matplotlib 库中的 pyplot 模块,并命名为 plt。#Matplotlib 是一个强大的绘图库,常用于绘制图表和图像显示。#就是窗口# OpenCV BGR(Blue, Green, Red)# Matplotlib RGB(Red, Green, Blue)
import numpy as np #导入 NumPy 库,并命名为 np。#NumPy 提供了多维数组对象及各种派生对象(如掩模数组),并且包含大量用于数组快速操作的函数。# 如果图像不在脚本所在目录,请提供完整路径
img1_t = cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/IMG_20231230_171718.jpg")#使用 OpenCV 函数读取图像文件。
img2_t= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/202310281019103.jpg") #它返回的是一个 NumPy 数组,其中包含了图像的像素数据。如果没有找到图像或路径错误,img 将是 None。
img3_t= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/maoci1.jpg") #它返回的是一个 NumPy 数组,其中包含了图像的像素数据。如果没有找到图像或路径错误,img 将是 None。
moban= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/moban.jpg")
jinzitan= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/jingzhitan.jpg")
# 检查图片是否成功加载
if img1_t is None:print("Error: 图像1加载失败,请检查文件路径和文件权限。")
elif img2_t is None: print("Error: 图像2加载失败,请检查文件路径和文件权限。")
elif img3_t is None: print("Error: 图像3加载失败,请检查文件路径和文件权限。")
elif moban is None: print("Error: 图像模板加载失败,请检查文件路径和文件权限。")
elif jinzitan is None: print("Error: 图像模板加载失败,请检查文件路径和文件权限。")
else:# 将 BGR 图像转换为 RGB 图像以供 matplotlib 正确显示print(" 图像加载成功!")img1_rgb = cv2.cvtColor(img1_t, cv2.COLOR_BGR2RGB)#由于 OpenCV 默认使用 BGR 格式来存储图像数据,而大多数其他图像处理工具(包括 Matplotlib)使用 RGB 格式。 #因此,在用 Matplotlib 显示图像之前,我们需要将图像从 BGR 格式转换为 RGB 格式。img3_rgb = cv2.cvtColor(img3_t, cv2.COLOR_BGR2RGB)img2_rgb = cv2.cvtColor(img2_t, cv2.COLOR_BGR2RGB) #RGB 和 BGR 只是颜色通道的不同排序moban_rgb= cv2.cvtColor(moban, cv2.COLOR_BGR2RGB) jinzitan_rgb= cv2.cvtColor(jinzitan, cv2.COLOR_BGR2RGB)
#添加函数 图片展示函数
def CV_Show(name,img,time,percent): scale_percent = percent # 百分比width = int(img.shape[1] * scale_percent / 100) #shape[1]:图片的宽度height = int(img.shape[0] * scale_percent / 100) #shape[0]:图片的高度dim = (width, height)#格式为 (width, height)resized_img = cv2.resize(img, dim,interpolation=cv2.INTER_AREA)cv2.imshow(name, resized_img)cv2.waitKey(time*1000)#显示多少秒 cv2.destroyAllWindows()#***************预处理************
img2_gray=cv2.cvtColor(img2_rgb,cv2.COLOR_BGR2GRAY)#转化为灰白图
moban_gray=cv2.cvtColor(moban_rgb,cv2.COLOR_BGR2GRAY)#转化为灰白图
img2_gray_ret,img2_gray_dst=cv2.threshold(img2_gray,150,255,cv2.THRESH_BINARY)#返回参数分别为 返回阈值,返回图片
#CV_Show("img2_img2_gray_dstgray",img2_gray_dst,3,50)
#********************************
#CV_Show("jinzitan",jinzitan,3,80)up=cv2.pyrUp(jinzitan)#放大,变模糊
down=cv2.pyrDown(jinzitan)#缩小
print("原图:{}".format(jinzitan.shape))
print("放大图:{}".format(up.shape))
print("缩小图:{}".format(down.shape))# cv2.imshow("up", up)
# cv2.imshow("down", down)
# cv2.waitKey(3*1000)#显示多少秒
# cv2.destroyAllWindows()#先放大,后缩小
# up_down=cv2.pyrUp(jinzitan)#放大,变模糊
# up_down=cv2.pyrDown(up_down)#放大,变模糊
# CV_Show("up_down,jinzitan",np.hstack((up_down,jinzitan)),3,80)#将图片放一起来对比# #先缩小,在放大
# down_up=cv2.pyrUp(jinzitan)#放大,变模糊
# down_up=cv2.pyrDown(down_up)#放大,变模糊
# CV_Show("down_up,jinzitan",np.hstack((down_up,jinzitan)),3,80)#将图片放一起来对比#拉普拉斯金字塔(就是放大在缩小,之后再原图-处理图)up_down=cv2.pyrUp(jinzitan)#放大,变模糊
up_down=cv2.pyrDown(up_down)#放大,变模糊
lapuls=jinzitan-up_down
CV_Show("lapuls,jinzitan",np.hstack((lapuls,jinzitan)),3,80)#将图片放一起来对比