Python-opencv学习第二十九课:高斯双边模糊

文章目录

  • Python-opencv学习第二十九课:高斯双边模糊
  • 一、学习部分
  • 二、代码部分
    • 1.引入库
    • 2.读入数据
    • 3.完整代码
  • 三、运行结果
  • 总结

一、学习部分

记录笔者学习Python-opencv学习第二十九课:高斯双边模糊,代码资料来源于网络贾老师视频。

二、代码部分

1.引入库

代码如下:

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

2.读入数据

代码如下:

def bitfilter_demo():#image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)#灰度图image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # 灰度图cv.imshow("input",image)#result=cv.GaussianBlur(image,(0,0),15)#高斯模糊API(模糊 可改参数)result = cv.bilateralFilter(image,0,100,10,)  # 高斯双边模糊API(模糊 可改参数)类似于磨皮PScv.imshow("result", result)cv.waitKey(0)cv.destroyAllWindows()

3.完整代码

代码如下:

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as npdef read_demo_():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.imshow("input", image)cv.waitKey(0)cv.destroyAllWindows()def color_space_demo_():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # 将bgr转换为grayhsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # 将bgr转换为hsvthsv = cv.cvtColor(image, cv.COLOR_HSV2BGR)  # 将HSV转换为BGR# cv.namedwindow("input",cv.WINDOW.AUTOSIZE)cv.imshow("gray", gray)  # 显示一个窗口名为gray的gray图像cv.imshow("hsv", hsv)  # 显示一个窗口名为hsv的hsv图像cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像cv.waitKey(0)  # 相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭cv.destroyAllWindows()def mat_demo_():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255h, w, c = image.shape  # 打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号blank = np.zeros((h, w, c), dtype=np.uint8)  # 产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。# blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配# blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉blank = image  # 实现原图到blank的复制cv.imshow("image", image)  # 显示原图窗口cv.imshow("blank", blank)  # 显示blank空白窗口cv.waitKey(0)  # 相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭cv.destroyAllWindows()def pixel_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.imshow("input", image)h, w, c = image.shape  # 打印图像维度for row in range(h):  # 行for col in range(w):  # 列b, g, r = image[row, col]  # 图像写像素image[row, col] = (0, g, r)  # 取反操作,可对其进行更改cv.imshow("result", image)  # 显示取反后的图片cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)  # 保存数据图cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def math_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.imshow("input", image)h, w, c = image.shape  # 打印图像维度blank = np.zeros_like(image)  # 创建一个和image同尺寸的blank空白窗口blank[:, :] = (2, 2, 2)  # 让blank空白窗口上面的像素都是50x50cv.imshow("blank", blank)  # 显示一个blank空白窗口,窗口上面的像素都是50x50# result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)# result = cv.subtract(image, blank)  # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)result = cv.divide(image, blank)  # 改变对比度,对比度降低# result = cv.multiply(image, blank)#改变对比度,对比度提高cv.imshow("result", result)  # 显示取反后的图片# cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def nothing(x):print(x)def adjust_light_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  # 创建一个自动大小的窗口cv.createTrackbar("lightness", "input", 0, 100, nothing)  # 创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调cv.imshow("input", image)blank = np.zeros_like(image)  # 创建一个和image同尺寸的blank空白窗口while True:pos = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。blank[:, :] = (pos, pos, pos)  # 让blank空白窗口上面的像素都是50x50# cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50result = cv.add(image, blank)cv.imshow("result", result)  # 显示取反后的图片# cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图c = cv.waitKey(1)  # 设置关闭窗口if c == 27:  # Escbreakcv.destroyAllWindows()def adjust_contrast_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  # 创建一个自动大小的窗口cv.createTrackbar("lightness", "input", 0, 100, nothing)  # 创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调cv.createTrackbar("contrast", "input", 100, 200, nothing)  # 创建一个名为contrast的trackbar,窗口与创建窗口一致。100-200,无回调cv.imshow("input", image)blank = np.zeros_like(image)  # 创建一个和image同尺寸的blank空白窗口while True:# pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。light = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。亮度contrast = cv.getTrackbarPos("contrast", "input") / 100  # 拖动第几个TrackBar,TrackBar在哪个窗口。对比度print("light:", light, "contrast:", contrast)  # 打印输出实时light和contrast# blank[:,:]=(light,light,light)#让blank空白窗口上面的像素都是50x50# cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50result = cv.addWeighted(image, contrast, blank, 0.5, light)  # 对比度和亮度调整函数cv.imshow("result", result)  # 显示取反后的图片# cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图c = cv.waitKey(1)  # 设置关闭窗口if c == 27:  # Escbreakcv.destroyAllWindows()def keys_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  # 创建一个自动大小的窗口cv.imshow("input", image)while True:c = cv.waitKey(1)  # 设置关闭窗口gray = imageif c == 49:  # 1控制gray窗口gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow("result", gray)  # 显示灰度图片if c == 50:  # 2控制hsv窗口hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)cv.imshow("result", hsv)  # 显示灰度图片if c == 51:  # 3控制图像几何操作invert = cv.bitwise_not(image)cv.imshow("result", invert)  # 显示图片几何操作if c == 27:  # Esc关闭所有窗口breakcv.destroyAllWindows()def color_table_demo():colormap = [cv.COLORMAP_AUTUMN,cv.COLORMAP_BONE,cv.COLORMAP_JET,cv.COLORMAP_WINTER,cv.COLORMAP_RAINBOW,cv.COLORMAP_OCEAN,cv.COLORMAP_SUMMER,cv.COLORMAP_SPRING,cv.COLORMAP_COOL,cv.COLORMAP_PINK,cv.COLORMAP_HOT,cv.COLORMAP_PARULA,cv.COLORMAP_MAGMA,cv.COLORMAP_INFERNO,cv.COLORMAP_PLASMA,cv.COLORMAP_VIRIDIS,cv.COLORMAP_CIVIDIS,cv.COLORMAP_TWILIGHT,cv.COLORMAP_TWILIGHT_SHIFTED]  # 自带颜色表操作代码19个image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  # 创建一个自动大小的窗口cv.imshow("input", image)index = 0while True:dst = cv.applyColorMap(image, colormap[index] % 19)  # 循环19颜色index += 1cv.imshow("color style", dst)c = cv.waitKey(1000)  # 设置关闭窗口if c == 27:  # Esc关闭所有窗口breakcv.destroyAllWindows()def bitwise_demo():b1 = np.zeros((400, 400, 3), dtype=np.uint8)  # 创建一个彩色图片b1[:, :] = (255, 0, 255)  # 赋值b2 = np.zeros((400, 400, 3), dtype=np.uint8)  # 创建一个彩色图片b2[:, :] = (0, 255, 0)  # 赋值cv.imshow("b1", b1)cv.imshow("b2", b2)dst1 = cv.bitwise_and(b1, b2)  # 与dst2 = cv.bitwise_or(b1, b2)  # 或cv.imshow("bitwise_and", dst1)cv.imshow("bitwise_or", dst2)cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def channel_split_demo():b1 = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255print(b1.shape)  # 打印维度cv.imshow("input", b1)cv.imshow("b1", b1[:, :, 2])mv = cv.split(b1)  # 图像分离print(len(mv))mv[0][:, :] = 255  #result = cv.merge(mv)  # 图像合并dst = np.zeros(b1.shape, dtype=np.uint8)cv.mixChannels([b1], [dst], fromTo=[2, 0, 1, 1, 0, 2])  # 通道混合cv.imshow("output4", dst)cv.imshow("result", result)cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def colorspace_demo():b1 = cv.imread("C:/Users/akaak/Pictures/OpenCV/csdn/12/greenback.jpg")  # BGR 0-255print(b1.shape)  # 打印维度cv.imshow("input", b1)hsv = cv.cvtColor(b1, cv.COLOR_BGR2HSV)  # BGR转换为HSVcv.imshow("hsv", hsv)mask = cv.inRange(hsv, (35, 43, 46), (77, 255, 255))  # 根据像素范围进行过滤,把符合像素范围的保留,赋成0黑色和1白色(其实就是将绿色背景变成白色背景)cv.imshow("mask", mask)cv.bitwise_not(mask, mask)  # 取反操作result = cv.bitwise_and(b1, b1, mask=mask)  # 原图与mask区域相与(mask大于0的区域)cv.imshow("result", result)cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def pixel_stat_demo():b1 = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255print(b1.shape)  # 打印维度cv.imshow("input", b1)means, dev = cv.meanStdDev(b1)  # 均值与方差print(means, "dev:", dev)cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def drawing_demo():b1 = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  #temp = np.copy(b1)cv.rectangle(b1, (140, 50), (260, 210), (0, 0, 255), 4, 8, 0)  # 左上角 右上角 颜色 线宽(<0填充,>0不填充) 领域# cv.circle(b1,(200,200),100,(255,0,0),-2,8,0)#中心位置 半径 颜色 线宽 领域# cv.line(b1,(50,50),(400,400),(0,255.0),4,8,0)# b1[:,:,:]=0#还原cv.putText(b1, "99% face", (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 255), 2, 8)  # 位置坐标 字体 字号 颜色 线宽 领域cv.imshow("b1", b1)cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()def random_color_demo():b1 = np.zeros((512, 512, 3), dtype=np.uint8)while True:  # 无休止的绘制xx = np.random.randint(0, 512, 2, dtype=np.int)  # 随机位置yy = np.random.randint(0, 512, 2, dtype=np.int)  # 随机位置bgr = np.random.randint(0, 255, 3, dtype=np.int32)  # 随机颜色print(bgr[0], bgr[1], bgr[2])cv.line(b1, (xx[0], yy[0]), (xx[1], yy[1]), (np.int(bgr[0]), np.int(bgr[1]), np.int(bgr[2])), 2, 8,0)  # 随机位置绘制 随机颜色绘制cv.imshow("input", b1)c = cv.waitKey(10)  # 设置关闭窗口if c == 27:breakcv.destroyAllWindows()def polyline_drawing_demo():canvas = np.zeros((512, 512, 3), dtype=np.uint8)pts = np.array([[100, 100], [350, 100], [450, 280], [320, 450], [80, 400]], dtype=np.int32)  # 五个点# cv.fillPoly(canvas,[pts],(255,0,255),8,0)#填充多边形# cv.polylines(canvas,[pts],True,(0,0,255),2,8,0);#绘制多边形cv.drawContours(canvas, [pts], -1, (255, 0, 0), -1)  # 万能操作 集合上个两个API优点 填充+绘制cv.imshow("poyline", canvas)c = cv.waitKey(0)  # 设置关闭窗口cv.destroyAllWindows()# b1=np.zeros((512,512,3),dtype=np.uint8)
b1 = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")
img = np.copy(b1)
x1 = -1
x2 = -1
y1 = -1
y2 = -1def mouse_drawing(event, x, y, flags, param):  # 回调函数mouse_drawingglobal x1, y1, x2, y2  # 全局变量print(x, y)  # 回调函数(给系统)if event == cv.EVENT_LBUTTONDOWN:  # 按下x1 = xy1 = yif event == cv.EVENT_MOUSEMOVE:  # 移动if x1 < 0 or y1 < 0:returnx2 == xy2 = ydx = x2 - x1dy = y2 - y1if dx > 0 or dy > 0:b1[:, :, :] = img[:, :, :]cv.rectangle(b1, (x1, y1), (x2, y2), (0, 0, 255), 2, 8, 0)  # 绘制矩形if event == cv.EVENT_LBUTTONUP:  # 抬起x2 == xy2 = ydx = x2 - x1dy = y2 - y1if dx > 0 or dy > 0:b1[:, :, :] = img[:, :, :]cv.rectangle(b1, (x1, y1), (x2, y2), (0, 0, 255), 2, 8, 0)x1 = -1  # 重置回原来的初始值x2 = -1y1 = -1y2 = -1def mouse_demo():cv.namedWindow("mouse_demo", cv.WINDOW_AUTOSIZE)  # 创建一个窗口cv.setMouseCallback("mouse_demo", mouse_drawing)  # 调用鼠标操作while True:cv.imshow("mouse_demo", b1)c = cv.waitKey(10)if c == 27:breakcv.destroyAllWindows()def norm_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")cv.namedWindow("norm_demo", cv.WINDOW_AUTOSIZE)  # 创建一个窗口print(image / 255.0)# cv.imshow("norm_demo",image/255.0)#归一化演示 浮点数# cv.imshow("norm_demo", np.float32(image))#浮点数# cv.imshow("norm_demo", np.float32(image) / 255.0)#归一化0-1# cv.imshow("norm_demo", np.uint8(image))#正常显示# result=np.zeros_like(np.float32(image))# cv.normalize(np.float32(image),result,0,1,cv.NORM_MINMAX,dtype=cv.CV_32F)# cv.imshow("norm_demo", result)result = np.zeros_like(np.float32(image))cv.normalize(np.float32(image), result, 0, 1, cv.NORM_MINMAX, dtype=cv.CV_32F)cv.imshow("norm_demo", np.uint8(result * 255))  # 浮点数变字节 深度学习cv.waitKey(0)cv.destroyAllWindows()def resize_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")h,w,c=image.shapecv.namedWindow("resize_demo", cv.WINDOW_AUTOSIZE)  # 创建一个窗口dst=cv.resize(image,(w//h,h//2),interpolation=cv.INTER_NEAREST)#放缩与插值dst = cv.resize(image,(0,0),fx=0.75,fy=0.75,interpolation=cv.INTER_NEAREST)  # 指定大小放缩与插值cv.imshow("resize_demo", dst)cv.waitKey(0)cv.destroyAllWindows()def flip_demo():image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")cv.namedWindow("flip_demo", cv.WINDOW_AUTOSIZE)  # 创建一个窗口#dst=cv.flip(image,0)#0上下翻转#dst = cv.flip(image, 1)  # 1左右翻转dst = cv.flip(image, -1)  # -1对角线翻转cv.imshow("image", image)cv.imshow("flip_demo", dst)cv.waitKey(0)cv.destroyAllWindows()def rotate_demo():src=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")cv.imshow("image",src)h,w,c=src.shape#定义矩阵M=np.zeros((2,3),dtype=np.float32)#定义角度alpha=np.cos(np.pi/4.0)beta=np.sin(np.pi/4.0)print("alpha:",alpha)#初始化矩阵M[0,0]=alphaM[1,1] =alphaM[0,1] =betaM[1,0] =-betacx=w/2cy=h/2tx=(1-alpha)*cx-beta*cyty=beta*cx+(1-alpha)*cyM[0,2] = txM[1,2] = ty#change with full sizebound_w=int(h*np.abs(beta)+w*np.abs(alpha))bound_h = int(h * np.abs(alpha) + w * np.abs(beta))#添加中心位置迁移M[0, 2] +=bound_w/2-txM[1, 2] +=bound_h/2-tydst=cv.warpAffine(src,M,(bound_w,bound_h))cv.imshow("rotate without cropping",dst)cv.waitKey(0)cv.destroyAllWindows()def video_demo():cap=cv.VideoCapture("C:/Users/akaak/Videos/01.mp4")#读视频 通过摄像头/路径w=cap.get(cv.CAP_PROP_FRAME_WIDTH)#获取宽度h=cap.get(cv.CAP_PROP_FRAME_HEIGHT)#获取高度fps=cap.get(cv.CAP_PROP_FPS)#获取帧率:1s中播放多少张图像#out=cv.VideoWriter("C:/Users/akaak/Videos/TEST.mp4",cv.VideoWriter_fourcc('P','I','M','1'),fps,(np.int(w),np.int(h)),True)out=cv.VideoWriter("C:/Users/akaak/Videos/TEST.mp4", cv.CAP_ANY,np.int(cap.get(cv.CAP_PROP_FOURCC)),fps,(np.int(w),np.int(h)),True)#out = cv.VideoWriter("C:/Users/akaak/Videos/TEST.mp4", cv.CAP_FFMPEG, np.int(cap.get(cv.CAP_PROP_FOURCC)), fps,(np.int(w), np.int(h)), True)#没有test生成print(w,h,fps)while True:ret,frame=cap.read()#frame=cv.flip(frame,1)if ret is not True:#读完视频自动关闭breakcv.imshow("frame",frame)hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)#hsv转换cv.imshow("result",hsv)#显示hsvout.write(hsv)#保存c=cv.waitKey(10)if c==27:breakcv.destroyAllWindows()out.release()#写完释放cap.release()#相机用完也释放def image_hist():image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")cv.imshow("input",image)color=('blue','green','red')#三通道for i,color in enumerate(color):#每个通道循环一次hist=cv.calcHist([image],[i],None,[256],[0,256])#计算直方图统计的API函数print(hist)#打印plt.plot(hist,color=color)plt.xlim([0,256])#可改参数【32】plt.show()cv.waitKey(0)cv.destroyAllWindows()def hist2d_demo():image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)#转成hsvhist=cv.calcHist([hsv],[0,1],None,[48,48],[0,180,0,256])#h 0-180 s 0-256 计算2d直方图dst=cv.resize(hist,(400,400))#变幻尺寸400*400cv.normalize(dst,dst,0,255,cv.NORM_MINMAX)#归一化0-255 key point!cv.imshow("image",image)dst=cv.applyColorMap(np.uint8(dst),cv.COLORMAP_JET)#色彩填充cv.imshow("hist",dst)plt.imshow(hist,interpolation='nearest')plt.title("2D Histogram")plt.show()cv.waitKey(0)cv.destroyAllWindows()def eqhist_demo():image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)#灰度图cv.imshow("input",image)result=cv.equalizeHist(image)#直方图均衡化APIcv.imshow("result", result)cv.waitKey(0)cv.destroyAllWindows()def conv_demo():#image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)#灰度图image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # 灰度图cv.imshow("input",image)result=cv.blur(image,(15,15))#卷积和API(模糊 可改参数)cv.imshow("result", result)cv.waitKey(0)cv.destroyAllWindows()def Gaussian_demo():#image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)#灰度图image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # 灰度图cv.imshow("input",image)#result=cv.GaussianBlur(image,(0,0),15)#高斯模糊API(模糊 可改参数)result = cv.GaussianBlur(image, (5, 5), 15)  # 高斯模糊API(模糊 可改参数)高斯核函数必须是奇数cv.imshow("result", result)cv.waitKey(0)cv.destroyAllWindows()def bitfilter_demo():#image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png",cv.IMREAD_GRAYSCALE)#灰度图image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # 灰度图cv.imshow("input",image)#result=cv.GaussianBlur(image,(0,0),15)#高斯模糊API(模糊 可改参数)result = cv.bilateralFilter(image,0,100,10,)  # 高斯双边模糊API(模糊 可改参数)类似于磨皮PScv.imshow("result", result)cv.waitKey(0)cv.destroyAllWindows()if __name__ == "__main__":bitfilter_demo()

三、运行结果

总结

本文介绍了笔者学习Python-opencv第二十九课:高斯双边模糊,学习了cv.bilateralFilter(image,0,100,10,) 函数实现了对图像高斯双边模糊的操作。(代码资料来源于网络贾老师视频)

Python-opencv学习第二十九课:高斯双边模糊相关推荐

  1. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  2. 风炫安全web安全学习第二十九节课 CSRF防御措施

    风炫安全web安全学习第二十九节课 CSRF防御措施 CSRF防御措施 增加token验证 对关键操作增加token验证,token值必须随机,每次都不一样 关于安全的会话管理(SESSION) 不要 ...

  3. NeHe OpenGL第二十九课:Blt函数

    NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它.它非常的简单,就是把一块纹理贴到另一块纹理上. 这篇文章是有 ...

  4. NeHe OpenGL教程 第二十九课:Blt函数

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. 风炫安全web安全学习第二十八节课 CSRF攻击原理

    风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...

  6. Python界面编程第十九课:Pyside2 (Qt For Python)创建菜单

    先看完整代码: from PySide2.QtWidgets import QApplication,QMainWindow, QAction import sys from PySide2.QtGu ...

  7. java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...

    问题:如果把边长都是有理数的三角形称作"有理三角形",编程计算"有理三角形"的面积(有理数或带根号的无理数,不是浮点数). 关键点分析:根号中的底化成最简分数, ...

  8. 大三小学期进阶课程第二十九课:感知概貌

    第29课.感知概貌 人类开车与机器开车在感知上的区别 (1)感知是机器人学科的问题,机器人要做的即是像人类学习,但不是完全模仿,应做到扬长避短.例如飞机的飞行不需要和鸟的飞行一样,而是要根据自己的特性 ...

  9. 第二十九课.回声状态网络ESN

    目录 Echo State Network ESN的训练与预测 关于ESN工作原理的理解 基于Numpy的ESN Echo State Network ESN的训练与预测 回声状态网络(Echo St ...

最新文章

  1. [vim]高亮查找匹配
  2. 数组初始化使用(写)new与不使用(不写)new
  3. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)
  4. 计算机五大逻辑部件数据流,211计算机基础知识综合篇.ppt
  5. 32岁转行还来得及吗?
  6. Singularity将本地SIF文件,转成sandbox
  7. numpy 用于图像处理(灰度图、转置、通道分离、图像扩展、水平镜像、水平翻转、调换x,y坐标、添加mask、随机打乱顺序、交换通道)
  8. [luoguP2285] [HNOI2004]打鼹鼠(DP)
  9. sublime注释乱码c语言,ConvertToUTF8:解决 Sublime Text的乱码问题
  10. ios14描述文件无法与服务器连接,iOS14屏蔽更新描述文件已损坏,无法安装的解决办法...
  11. uniapp---app端上传证件(身份证/银行卡)照片后转base64发送给后台功能实现
  12. Android实现图片OCR功能
  13. Codeforces 750C New Year And Rating 二分判定
  14. 他是这么解决视频版权的,南京小伙做视频剪辑,一个月赚了7k多
  15. 数据结构队列-先进先出
  16. HTML5网页设计练习-选择器的应用
  17. android Google Map API V2 (key 申请)
  18. 在simulink下编程stm32,为什么我的stm32用串口打印数据,总是00或者ff
  19. 【分享干货】AD9653调试笔记
  20. python 正整数 连续多个数之和_[算法]正整数分解为几个连续自然数之和

热门文章

  1. Vue中实现点击当前行变色
  2. 如何成为ffmpeg开发者
  3. nodejs读取图片像素
  4. 天池 入门赛-新闻文本分类-单个bert模型分数0.961
  5. 视频驱动之eDP接口LCD调试
  6. Pytorch-YOLOV4-火焰目标检测
  7. Linux学习日志_虚拟化管理工具
  8. 〖产品思维训练白宝书 - 核心竞争力篇①〗- 产品经理 的核心竞争力解读
  9. go语言的控制台输入
  10. 图像描述的注意力可视化