11 边缘保留滤波(EPF)

import cv2 as cv
import numpy as npdef bi_demo(image):dst = cv.bilateralFilter(image, 0, 100, 15)#双边滤波#参数分别为:输入图像、像素领域的直径、颜色领域的标准差(一般尽可能大)、坐标空间的标准方差(一般尽可能小)cv.imshow("bi_demo", dst)def shift_demo(image):dst = cv.pyrMeanShiftFiltering(image, 10, 50)#均值滤波#输入参数分别为:原图像、空间窗的半径、色彩窗的半径cv.imshow("shift_demo", dst)print("--------- Hello Python ---------")
src = cv.imread("D:/vcprojects/images/example.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)bi_demo(src)
shift_demo(src)cv.waitKey(0)cv.destroyAllWindows()

12 图像直方图(histogram)

import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltdef plot_demo(image):plt.hist(image.ravel(), 256, [0, 256])#统计频次plt.show("直方图")def image_hist(image):color = ('blue', 'green', 'red')for i, color in enumerate(color):hist1 = cv.calcHist([image], [i], None, [256], [0, 256])plt.plot(hist1, color=color)plt.xlim([0, 256])plt.show()print("--------- Hello Python ---------")
src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)plot_demo(src)
image_hist(src)cv.waitKey(0)
cv.destroyAllWindows()

13 直方图应用

import cv2 as cv
import numpy as npdef equalHist_demo(image):#直方图均衡化gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)dst = cv.equalizeHist(gray)cv.imshow("equalHist_demo", dst)def clahe_demo(image):#局部自适应直方图均衡化gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)clahe = cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))dst = clahe.apply(gray)cv.imshow("clahe_demo", dst)def create_rgb_hist(image):h, w, c = image.shapergbHist = np.zeros([16*16*16, 1], np.float32)bsize = 256 / 16for row in range(h):for col in range(w):b = image[row, col, 0]g = image[row, col, 1]r = image[row, col, 2]index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16 + np.int(r/bsize)rgbHist[np.int(index), 0] = rgbHist[np.int(index), 0] + 1return rgbHistdef hist_compare(image1, image2):#直方图比较hist1 = create_rgb_hist(image1)hist2 = create_rgb_hist(image2)match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)#巴氏距离match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)#相关性match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)#卡方,越大越不相似print("巴氏距离: %s, 相关性: %s, 卡方: %s"%(match1, match2, match3))print("--------- Hello Python ---------")
src = cv.imread("D:/vcprojects/images/rise.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)equalHist_demo(src)
clahe_demo(src)image1 = cv.imread("D:/vcprojects/images/lena.png")
image2 = cv.imread("D:/vcprojects/images/lenanoise.png")
cv.imshow("image1", image1)
cv.imshow("image2", image2)
hist_compare(image1, image2)cv.waitKey(0)cv.destroyAllWindows()

--------- Hello Python ---------
巴氏距离: 0.8569864945854435, 相关性: 0.07862638379496767, 卡方: 46585983.69502137

14 直方图反向投影

import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltdef back_projection_demo():#直方图反向投影sample = cv.imread("D:/vcprojects/images/sample.png")target = cv.imread("D:/vcprojects/images/target.png")roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)# show imagescv.imshow("sample", sample)cv.imshow("target", target)roiHist = cv.calcHist([roi_hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)cv.imshow("backProjectionDemo", dst)def hist2d_demo(image):#2维直方图hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#hist = cv.calcHist([image], [0, 1], None, [32, 32], [0, 180, 0, 256])hist = cv.calcHist([image], [0, 1], None, [180, 256], [0, 180, 0, 256])#cv.imshow("hist2d", hist)plt.imshow(hist, interpolation='nearest')plt.title("2D Histogram")plt.show()print("--------- Hello Python ---------")
src = cv.imread("D:/vcprojects/images/demo.png")
#hist2d_demo(src)
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)hist2d_demo(src)back_projection_demo()
cv.waitKey(0)cv.destroyAllWindows()

15模板匹配

import cv2 as cv
import numpy as npdef template_demo():tpl = cv.imread("D:/vcprojects/images/person_head.png")target = cv.imread("D:/vcprojects/images/pedestrian.png")cv.imshow("template image", tpl)cv.imshow("target image", target)methods = [cv.TM_SQDIFF_NORMED, cv.TM_CCORR_NORMED, cv.TM_CCOEFF_NORMED]th, tw = tpl.shape[:2]for md in methods:print(md)result = cv.matchTemplate(target, tpl, md)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)if md == cv.TM_SQDIFF_NORMED:tl = min_locelse:tl = max_locbr = (tl[0]+tw, tl[1]+th)cv.rectangle(target, tl, br, (0, 0, 255), 2)cv.imshow("match-" + np.str(md), target)#cv.imshow("match-" + np.str(md), result)print("--------- Python OpenCV Tutorial ---------")
template_demo()
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
1
3
5

16图像二值化

import cv2 as cv
import numpy as npdef threshold_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY|cv.THRESH_OTSU)print("threshold value %s"%ret)cv.imshow("threshold_binary", binary)def local_threshold(image):#自适应阈值二值化gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)cv.imshow("local_threshold_binary", binary)def custom_threshold(image):#自定义二值化gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)h, w = gray.shape[:2]m = np.reshape(gray, [1, w*h])mean = m.sum() / (w*h)print("mean : ", mean)ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)cv.imshow("custom_threshold_binary", binary)print("--------- Python OpenCV Tutorial ---------")
#src = cv.imread("D:/vcprojects/images/demo.png")
src = cv.imread("D:/vcprojects/images/case2.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)threshold_demo(src)
local_threshold(src)
custom_threshold(src)
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
threshold value 119.0
mean : 148.16271116251838

17 超大图像二值化

import cv2 as cv
import numpy as npdef big_image_binary(image):print(image.shape)cw = 256ch = 256h, w = image.shape[:2]gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)for row in range(0, h, ch):for col in range(0, w, cw):roi = gray[row:row+ch, col:cw+col]dst=cv.adaptiveThreshold(roi, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 127,20)gray[row:row+ch, col:cw+col]=dstprint(np.std(dst), np.mean(dst))cv.imwrite("D:/result_binary.png", gray)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/red_text2.png")
big_image_binary(src)
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
(7749, 5477, 3)

import cv2 as cv
import numpy as npdef big_image_binary(image):print(image.shape)cw = 256ch = 256h, w = image.shape[:2]gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)for row in range(0, h, ch):for col in range(0, w, cw):roi = gray[row:row+ch, col:cw+col]print(np.std(roi), np.mean(roi))dev = np.std(roi)if dev < 15:gray[row:row + ch, col:cw + col] = 255else:ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)gray[row:row + ch, col:cw + col] = dstcv.imwrite("D:/vcprojects/result_binary.png", gray)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/red_text2.png")
big_image_binary(src)
cv.waitKey(0)cv.destroyAllWindows()

--------- Python OpenCV Tutorial ---------
(7749, 5477, 3)

18 图像金字塔

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()#把dst复制给tempreturn pyramid_imagesdef 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("D:/vcprojects/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)pyramid_demo(src)
lapalian_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

19 图像梯度

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)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)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("D:/vcprojects/images/shou.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)lapalian_demo(src)
sobel_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

20 canny边缘提取

import cv2 as cv
import numpy as npdef edge_demo(image):blurred = cv.GaussianBlur(image, (3, 3), 0)#降噪gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)# X Gradientxgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)# Y Gradientygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)#edge#edge_output = cv.Canny(xgrad, ygrad, 50, 150)edge_output = cv.Canny(gray, 50, 150)cv.imshow("Canny Edge", edge_output)dst = cv.bitwise_and(image, image, mask=edge_output)cv.imshow("Color Edge", dst)print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记2相关推荐

  1. Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记1

    2 图像加载与保存 import cv2 as cv import numpy as npdef video_demo():capture = cv.VideoCapture(0)while(True ...

  2. Python+OpenCV3.3图像处理视频教程 贾志刚 代码笔记3

    21 直线检测 import cv2 as cv import numpy as npdef line_detection(image):gray = cv.cvtColor(image, cv.CO ...

  3. Python+OpenCV3.3图像处理视频教程 贾志刚1

    1.概述与环境搭建 pip install opencv-pythonpip install opencv-contrib-pythonpip install pytesseract 测试: impo ...

  4. 2018年最新Spring Boot视频教程附代码笔记资料(50G)

    1. Spring Boot  项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot  项目实 ...

  5. 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)

    尚硅谷SpringBoot视频教程(内含Docker)附代码+笔记+课件 下载地址:百度网盘

  6. 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测

    1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...

  7. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  8. python structure_GitHub - CYZYZG/Data_Structure_with_Python: 这是我在学习《基于Python的数据结构》的时候的笔记与代码...

    Data_Structure_with_Python 这是我在学习<基于Python的数据结构>的时候的笔记与代码 主要参考:数据结构与算法(Python) 对于算法的时间效率,我们可以用 ...

  9. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...

    <利用python进行数据分析>是数据分析的基础教程,绝大部分数据分析师的入门教材,目前已经升级到第二版.本站搜集了教材的第二版原版代码进行中文翻译和注释,并做了一定的笔记.基本上只需要看 ...

最新文章

  1. 【ACM】杭电OJ 2007
  2. CentOS7下的离线yum源搭建
  3. 安卓手机如何解压缩文件
  4. 使用Myeclipse实现快速调试
  5. 数据库系统概论:第七章 数据库设计
  6. photoshop学习笔记(一)2015-12-4【新浪云搬运】
  7. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
  8. java object 详解_Java基础之Object类详解
  9. 9 WM配置-主数据-定义物料分阶段的范围(Staging Area)
  10. 蛋壳公寓CEO高靖被限制消费
  11. 【服务器】创建docker、运行jupyter相关命令
  12. 任务二十九:表单(一)单个表单项的检验
  13. 图像局部特征(十七)--DenseFeature
  14. OpenGL超级宝典(第7版)之VS2019使用sb7框架搭建自己的程序
  15. sqlserver 数据库文件损坏、数据库可疑修复处理
  16. 关于电脑是否需要安装杀毒软件的解答
  17. 艺歌点歌系统服务器连接不了,艺歌手机点歌系统歌曲是什么格式
  18. web前端开发学习经验分享——css,js进阶篇
  19. # responses[name] = response
  20. 在Visual Studio.NET中更改颜色-黑色与白色

热门文章

  1. Oracle 11g数据库基础教程(第2版)-课后习题-第七章
  2. 从信息学奥赛获奖年级分布看信息学奥赛最佳学习线路
  3. 金融行业中的AI、IB、VC和PE分别代表什么
  4. 如何用ChemDraw中的ChemFinder查询反应过程
  5. 耐克慌了!被这个踩着李宁上位的品牌当作对手的,老大都做不长!
  6. 结构化程序设计和面向对象程序设计的特点及优缺点
  7. Java实现 LeetCode 789 逃脱阻碍者(曼哈顿距离)
  8. Pytorch 多层感知机
  9. p2p终结者,汇报csdn广大码农。
  10. Linux相关图书选购指南