![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV
Sam Chou
这个作者很懒,什么都没留下…
展开
-
OpenCV——硬币检测与计数的设计实现
1、阈值分割#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 使用函数cv2.threshold()进行简单的阈值处理 函数原型为:threshold(src, thresh, maxval, type[, dst]) -> retval, dst 返回值 retval:当前用来对像素值进行分类的低阈值,默认情况下和参数thresh相等 dst:二值化处理后的图原创 2020-09-27 17:07:58 · 7376 阅读 · 1 评论 -
OpenCV——滑块交互操作
# 1.导入函数库import cv2import numpy as npdef nothing(x): """ 滑动条回调函数:获取滑动条的数值可以在回调函数中进行 :param obj: 空 :return: 空 """ pass# 2.创建一张图片img = np.zeros((500, 500, 3), np.uint8)# 3.创建一个窗口,存放调色板以及滑块cv2.namedWindow("image").原创 2020-09-22 20:56:01 · 634 阅读 · 0 评论 -
opencv——摄像机标定
1、查找角点#!/usr/bin/env python3import cv2 as cvimport numpy as np""" 打印chessboard.svg到一张A4纸上,这是一张8*8的棋盘, cv.findChessboardCorners 查找棋盘内部角的位置 findChessboardCorners(image, patternSize[, corners[, flags]]) -> retval, corners ima原创 2020-09-22 16:59:42 · 797 阅读 · 2 评论 -
opencv——图像分割(下)GrabCut算法
1、grabcut交互式前景提取# /usr/bin/env python3# coding=utf8"""交互式GrabCut算法,首先按住右键选取矩形框;‘N’键产生分割图;按下‘0’键之后,鼠标左键选择背景区域按下‘1’键之后,鼠标左键选择前景区域"""import cv2 as cvimport numpy as npclass App(object): """docstring for App""" BLUE = [255, 0, 0] # re原创 2020-09-22 16:28:23 · 824 阅读 · 1 评论 -
opencv——图像分割(上)分水岭算法
1、基于分水岭算法的图像分割#!/usr/bin env python3# -*- coding:UTF8 -*-""" OpenCV实现了一个基于掩模的分水岭算法。在这种算法中我们要设置那些山谷点会汇合,那些不会。 这是一种交互 式的图像分割。我们要做的就是给我们已知的对象打上不同的标签。 如果某个区域肯定是前景或对象,就使用某个颜色(或灰度值)标签标记它。 如果某个区域肯定不是对象而是背景就使用另外一个颜色标签标记。 而剩下的不能确定是前景还是背景的原创 2020-09-22 16:10:09 · 312 阅读 · 1 评论 -
opencv——霍夫圆检查
1、霍夫圆检测#!/usr/bin/env python3# -*- coding:UTF8 -*-"""霍夫圆检测cv2.HoughCircles(),函数返回值为圆心坐标(x,y)圆半径R。其函数原型为: HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles重点参数解析: method:定义检测图像中圆的方法。原创 2020-09-22 16:01:15 · 2958 阅读 · 0 评论 -
opencv——霍夫直线检测
1、标准霍夫直线检测#!/usr/bin/env python3# -*- coding:UTF8 -*-"""标准霍夫直线检测"""import cv2 as cvimport numpy as npdef nothing(x): passimg = cv.imread('bmx.jpg')blur = cv.GaussianBlur(img, (13, 13), -9, -9)cv.imshow('blur', blur)gray = cv.cvtColor原创 2020-09-22 15:55:51 · 558 阅读 · 0 评论 -
opencv——模板匹配
1、单模板匹配# 单模板匹配import cv2 as cvimg = cv.imread('./test.jpg')model = cv.imread('./face.jpg')h, w = model.shape[:2] # 获取需要检测的模板大小print(h, w)# 平方差匹配法,越接近0说明越匹配res1 = cv.matchTemplate(img, model, cv.TM_SQDIFF)cv.normalize(res1, res1, 0, 1, cv.NO原创 2020-09-22 15:30:00 · 134 阅读 · 0 评论 -
opencv——图像直方图(下)相似度比较与反向投影
1、彩色图像的直方图对比计算# 彩色图像的直方图对比import cv2 as cvimg1 = cv.imread('test.png')img2 = cv.imread('gray.jpg')hsvt1 = cv.cvtColor(img1, cv.COLOR_BGR2HSV)hsvt2 = cv.cvtColor(img2, cv.COLOR_BGR2HSV)hist1 = cv.calcHist([hsvt1], [0, 1], None, [180, 256], [0, 1原创 2020-09-21 22:07:01 · 206 阅读 · 0 评论 -
opencv——图像直方图(中)直方图均衡化
1、直方图均衡化import cv2 as cvimport numpy as npfrom matplotlib import pyplot as plt# 绘制直方图def custom_hist(gray): h, w = gray.shape hist = np.zeros([256], dtype=np.uint8) for row in range(h): for col in range(w): pv = gra原创 2020-09-21 21:49:45 · 150 阅读 · 0 评论 -
opencv——图像直方图(上)直方图分析
1、彩色直方图计算#!/usr/bin env python3# -*- coding:UTF8 -*-# 彩色图像直方图的计算与显示import cv2from matplotlib import pyplot as pltimg = cv2.imread('test.png')cv2.imshow('SrcImage', img)chans = cv2.split(img)colors = ('b', 'g', 'r')plt.title("’Flattened’ Color原创 2020-09-21 21:39:12 · 323 阅读 · 0 评论 -
opencv——轮廓层次结构
1、轮廓层次结构#!/usr/bin/env python3# encod:utf8import cv2 as cvdef splitContour(img, flag=True): contours, hierarchy = cv.findContours(img, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)[-2:] print(hierarchy) if flag: i = 0 for i in原创 2020-09-21 21:22:09 · 341 阅读 · 0 评论 -
opencv——轮廓特征及轮廓的性质
轮廓特征1、图像矩#!/usr/bin/env python3# -*- coding:UTF8 -*-"""查找图像轮廓,计算图像矩,根据公式计算轮廓重心图像的重心计算公式 cnt = contours[0] M = cv.moments(cnt) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) M:是一个词典 // 空间矩 double m00, m10, m01,原创 2020-09-21 21:14:44 · 732 阅读 · 0 评论 -
opencv——轮廓查找及绘制
1、轮廓查找及轮廓绘制#!/usr/bin/env python3# -*- coding:UTF8 -*-"""函数cv2.findContours()是用来在一副二值图像中查找轮廓的,其函数原型如下:findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy 重点参数解析: mode:轮廓检查模式,有四个可选的值,原创 2020-09-20 17:43:25 · 512 阅读 · 0 评论 -
opencv——傅里叶变换
1、傅里叶变换#!/usr/bin/env python3# encod=utf8import cv2 as cvimport numpy as npfrom matplotlib import pyplot as plt# cap = cv.VideoCapture('./images/stripe.gif')## ret, test_img = cap.read()# test_img = cv.cvtColor(test_img, cv.COLOR_BGR2GRAY)te原创 2020-09-20 17:29:03 · 274 阅读 · 0 评论 -
opencv——图像边缘检测(下)canny边缘检测器
1、Canny边缘检测#!/usr/bin/env python3# -*- coding: utf-8 -*-"""使用函数cv2.Canny()来进行边缘检测函数原型: Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edges 参数解析: threshold1:下阈值,低于下阈值的边界将被抛弃 threshold2:上阈值,高原创 2020-09-20 14:45:11 · 289 阅读 · 0 评论 -
opencv——图像边缘检测(中)Scharr、Laplacian算子
1、Schaar#!/usr/bin/env python3# -*- coding: utf-8 -*-"""Scharr算子是高斯平滑与微分操作的结合体,所以它具有很好的抗噪声能力。"""import cv2 as cvimport numpy as np'''添加椒盐噪声prob:噪声比例'''def sp_noise(image, prob): output = np.zeros(image.shape, np.uint8) thres = 1 -原创 2020-09-20 12:10:22 · 898 阅读 · 0 评论 -
opencv——图像边缘检测(上)sobel算子
1、Primitiv# 原始图像梯度算子import cv2import numpy as npmoon = cv2.imread("./sudoku.jpg", 0)row, column = moon.shapemoon_f = np.copy(moon)moon_f = moon_f.astype("float")Primary = np.zeros((row, column))for x in range(row - 1): for y in range(colu原创 2020-09-19 17:02:13 · 255 阅读 · 0 评论 -
opencv——形态学变换_形态学梯度_礼帽_顶帽
1、形态学梯度#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2 as cvimport numpy as np""" 开运算:先腐蚀后膨胀, 去除噪声,去除白色小点、空洞 闭运算:先膨胀后腐蚀, 用来填充前景物体的小黑点 形态学梯度:膨胀减去腐蚀, 可以得到前景物体的轮廓 礼帽:原图减去开运算 黑帽:闭运算减去原图 使用函数morphologyEx()进行形态学其他操作原创 2020-09-19 16:40:45 · 725 阅读 · 0 评论 -
opencv——形态学变换_开闭运算
1、开运算#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 开运算:先腐蚀后膨胀, 去除噪声,去除白色小点、空洞 闭运算:先膨胀后腐蚀, 用来填充前景物体的小黑点 形态学梯度:膨胀减去腐蚀, 可以得到前景物体的轮廓 礼帽:原图减去开运算 黑帽:闭运算减去原图 使用函数morphologyEx()进行形态学其他操作 函数原型为:morphologyEx(src, op, kernel[, ds原创 2020-09-19 16:20:45 · 973 阅读 · 0 评论 -
opencv——形态学变换_腐蚀_膨胀
1、腐蚀#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 腐蚀操作: 原理: 比如使用一个3X3的全一矩阵去腐蚀一张灰度图,中心锚点的值就会被替换为对应核中最小的值 原始数据: [[100 127 127 127 127] [127 127 127 127 127] [127 127 127 127 127] [127 127 127原创 2020-09-19 16:06:51 · 283 阅读 · 0 评论 -
OpenCV——几何变换的应用开发
import cv2import numpy as npimg = cv2.imread("Resources/SunSea_small.png")imageInfo = img.shapeh = imageInfo[0]w = imageInfo[1]deep = imageInfo[2]# 平移# tans = np.array([[1, 0, 100], [0, 1, 100]], np.float32)# dst = cv2.warpAffine(img, tans, (w.原创 2020-09-19 15:53:21 · 97 阅读 · 0 评论 -
opencv——几何变换_透视
1、透视变换#!/usr/bin/env python3# -*- coding: utf-8 -*-"""透视变换 对于透视变换,我们需要一个3x3变换矩 构建这个变换矩需要在输入图像上找4个点,以及它们在输出图像上对应的位置 注意四个点中的任意三个都不能共线。这个变换矩阵可以用函数 cv.getPerspectiveTransform()构建 然后把这个矩阵传给函数 getPerspectiveTransform(src, dst[, solveMetho原创 2020-09-18 17:24:31 · 578 阅读 · 0 评论 -
opencv——几何变换_旋转_仿射
1、旋转#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 旋转warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) -> dst 返回值: 旋转操作后的图像 参数解析: M:描述矩阵,使用函数getRotationMatrix2D(center, angle, scale) -> retval原创 2020-09-18 17:03:51 · 220 阅读 · 0 评论 -
opencv——几何变换_平移_缩放
1、扩展缩放#!/usr/bin/env python3# -*- coding: utf-8 -*-"""扩展缩放在缩放时推荐使用 cv.INTER_AREA在扩展时推荐使用 cv.INTER_CUBIC 慢) 和 cv2.INTER_LINEAR默认情况下所有改变图像尺寸大小的操作使用的插值方法 是 cv.INTER_LINEAR resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst 返回原创 2020-09-18 16:40:55 · 359 阅读 · 0 评论 -
opencv——图像金字塔
1、图像金字塔# 图像金字塔计算操作import cv2 as cvsrcimg = cv.imread('test.jpg')img1 = cv.pyrDown(srcimg)img2 = cv.pyrUp(srcimg)cv.imshow("Source image", srcimg)cv.imshow('Gaussian pyramid', img1)cv.imshow('Laplacian pyramid', img2)cv.waitKey(0)2、按键控制图像上原创 2020-09-18 16:26:47 · 130 阅读 · 0 评论 -
opencv——图像滤波_双边滤波
1、2D卷积#!/usr/bin/env python3# -*- coding: utf-8 -*-"""使用自定义卷积核进行图像2D卷积操作 函数原型: filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst 函数返回值:dst:2d卷积操作后的结果 函数解析: ddepth:指定输出图像深度,-1表示与原创 2020-09-18 16:05:47 · 644 阅读 · 0 评论 -
opencv——图像滤波_高斯滤波
1、高斯模糊_练习#!/usr/bin/env python3# -*- coding: utf-8 -*-"""低通滤波有模糊图像,消除噪声的作用 高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素, 用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 使用函数cv2.GaussianBlur()进行高斯模糊 函数原型:GaussianBlur(src, ksize, sigmaX[, dst[, si原创 2020-09-18 15:38:12 · 1176 阅读 · 1 评论 -
opencv——图像滤波_中值滤波
1、中值模糊#!/usr/bin/env python3# -*- coding: utf-8 -*-"""中值模糊,故名思意就是运用卷积框对应像素的中值代替中心像素点的值, 中值滤波器常常用来处理椒盐噪声,注意它的卷积核必须为正奇数。 其函数原型为: medianBlur(src, ksize[, dst]) -> dst"""import cv2 as cvimg = cv.imread('./mouse.jpg')# 中值滤波bl原创 2020-09-18 15:22:21 · 369 阅读 · 0 评论 -
opencv——图像滤波_均值值滤波
1、均值模糊#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2 as cvimport numpy as np"""低通滤波有模糊图像,消除噪声的作用 学习CV中的平均模糊函数cv2.blur() ,cv2.boxFilter() blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst 返回值: dst:平均模糊后的图像原创 2020-09-18 11:52:04 · 741 阅读 · 0 评论 -
OpenCV——Matplotlib模块应用开发
# 隐式创建图形# import matplotlib.pyplot as plt## x = [0, 1, 2, 3, 4]# y = [5, 6, 7, 8, 9]## plt.plot(x, y)## plt.show()# 显示创建# import matplotlib.pyplot as plt## # 手动创建画布对象# figure = plt.figure()# # 获取axes对象# axes1 = figure.add_subplot(2, 1, 1.原创 2020-09-18 11:03:00 · 110 阅读 · 0 评论 -
opencv——图像二值化
1、简单阈值#!/usr/bin/env python3# -*- coding: utf-8 -*-"""参考https://www.hindawi.com/journals/mse/2014/794574/fig6/ cv.THRESH_OTSU 使用大律法OTSU得到的全局自适应阈值"""import cv2 as cvimport matplotlib.pyplot as pltimport numpy as np# 导入matplotlib用于显示直方图,使用命原创 2020-09-17 21:25:57 · 296 阅读 · 0 评论 -
opencv——图像颜色空间(下)
1、使用摄像头进行颜色提取#!/usr/bin/env python3# -*- coding:UTF8 -*-"""从视频中获取每一帧图像将图像转换到 HSV 空间从滑动条获取H的值显示指定颜色的物体"""import cv2 as cvimport numpy as npcv.namedWindow('color')def nothing(x): pass# 创建滑动条cv.createTrackbar('H_MAX_Value', 'color'原创 2020-09-17 20:48:20 · 126 阅读 · 0 评论 -
opencv——图像颜色空间(上)
1、150多种颜色空间转换标志位#!/usr/bin/env python3# -*- coding:UTF8 -*-""" 打印CV中所有的颜色空间装换标志位"""import cv2 as cvflags = [i for i in dir(cv) if i.startswith('COLOR_')]print(flags)'''['COLOR_BAYER_BG2BGR', 'COLOR_BAYER_BG2BGR_EA', 'COLOR_BAYER_BG2BGR_原创 2020-09-17 20:21:05 · 549 阅读 · 0 评论 -
opencv——图像ROI
1、ROI感兴趣区域提取#!/usr/bin/env python3# -*- coding:UTF8 -*-""" 使用Numpy进行ROI操作"""import cv2 as cvimg = cv.imread('./cat.jpg')cat = Noneif img is None: raise Exception('文件路径有误')cv.namedWindow('image')font = cv.FONT_HERSHEY_SIMPLEXcoun原创 2020-09-17 19:56:18 · 229 阅读 · 0 评论 -
opencv——鼠标交互与响应
# 鼠标事件# EVENT_FLAG_LBUTTON 1 #左鍵拖曳# EVENT_FLAG_RBUTTON 2 #右鍵拖曳# EVENT_FLAG_MBUTTON 4 #中鍵拖曳# EVENT_FLAG_CTRLKEY 8 #(8~15)按Ctrl不放事件# EVENT_FLAG_SHIFTKEY 16 #(16~31)按Shift不放事件# EVENT_FLAG_ALTKEY 32 #(32~39).原创 2020-09-17 19:11:28 · 188 阅读 · 0 评论 -
opencv——OpenCV中的滑动条
1、API函数实现调色板#!/usr/bin/env python3# -*- coding:UTF8 -*-"""学习使用函数cv2.getTrackbarPos()和cv2.createTrackbar()分别用来获取滑动条参数和创建滑动条。cv2.getTrackbarPos()函数原型如下: getTrackbarPos(trackbarname, winname) -> retvalcv2.creatTrackbar()函数原型如下: createTrac.原创 2020-09-17 17:14:12 · 406 阅读 · 0 评论 -
opencv——OpenCV中的鼠标事件
1、双击画圆跟随鼠标画线#!/usr/bin/env python3# -*- coding:UTF8 -*-""" 学习使用函数setMouseCallback()监听鼠标事件 在我的系统中所支持的一些事件 ['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', .原创 2020-09-17 17:03:12 · 695 阅读 · 0 评论 -
OpenCV——几何图形绘制
import cv2import numpy as np# 创建一张图片img = np.ones((500, 500, 3), np.uint8)# 绘制线段cv2.line(img, (60, 240), (220, 240), (0, 0, 255), 3, cv2.LINE_AA)cv2.line(img, (140, 160), (140, 320), (0, 0, 255), 3, cv2.LINE_AA)# 绘制矩形cv2.rectangle(img, (100, 20.原创 2020-09-17 16:52:00 · 202 阅读 · 0 评论 -
OpenCV——图像基本操作
# 图像基本操作import cv2import numpy as npimg = cv2.imread('Resources/SunsetSea.png')# img1 = np.zeros((500, 500, 3), np.uint8)# # print(img1)## img2 = np.ones((500, 500, 3), np.uint8) * 255# print(img2)# px = img[100, 100]# print(px)# 修改像素点的值#.原创 2020-09-17 16:13:14 · 209 阅读 · 0 评论