
OpenCV
yang_jianfeng
这个作者很懒,什么都没留下…
展开
-
python+openCV图像处理(三十)
import cv2 as cvimport numpy as npfrom PIL import Imageimport pytesseract as tessdef recognize_text(): gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, open_out = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) cv.imshow("原创 2021-01-23 14:32:36 · 151 阅读 · 0 评论 -
python+openCV图像处理(二十九)
import cv2 as cvimport numpy as npdef face_detect_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) face_detector = cv.CascadeClassifier("1.xml") #face_detector = cv.CascadeClassifier("2.xml") #下载地址:https://github.com/opencv/open原创 2021-01-23 14:31:13 · 143 阅读 · 1 评论 -
python+openCV图像处理(二十八)分水岭
import cv2 as cvimport numpy as npdef watershed_demo(): # remove noise if any 去噪 #print(src.shape) blurred = cv.pyrMeanShiftFiltering(src, 10, 100) # gray\binary image 灰度、二值化 gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) ret, bi原创 2021-01-23 14:29:48 · 148 阅读 · 0 评论 -
python+openCV图像处理(二十七)
import cv2 as cvimport numpy as npdef tophat_demo(image):#顶帽=原图-开操作(腐蚀+膨胀) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15)) dst = cv.morphologyEx(gray, cv.MORPH_TOPHAT, kernel) #增加亮原创 2021-01-23 14:28:50 · 126 阅读 · 0 评论 -
python+openCV图像处理(二十六)开运算与闭运算
import cv2 as cvimport numpy as npdef open_demo(image):#开操作=腐蚀+膨胀 去外边白点 print(image.shape) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow("binary", bina原创 2021-01-23 14:27:49 · 680 阅读 · 0 评论 -
python+openCV图像处理(二十五)形态学处理
import cv2 as cvimport numpy as npdef erode_demo(image):#腐蚀 #print(image.shape) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) cv.imshow("binary", binary)原创 2021-01-23 14:26:00 · 145 阅读 · 0 评论 -
python+openCV图像处理(二十四)对象检测
import cv2 as cvimport numpy as npdef measure_object(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) print("threshold value : %s"%ret) cv.imshow("binary原创 2021-01-23 14:24:34 · 252 阅读 · 0 评论 -
python+openCV图像处理(二十三)轮廓检测
import cv2 as cvimport numpy as npdef edge_demo(image): blurred = cv.GaussianBlur(image, (3, 3), 0) gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) edge_output = cv.Canny(gray, 30, 100) cv.imshow("Canny Edge", edge_output) return edge原创 2021-01-23 14:22:55 · 250 阅读 · 0 评论 -
python+openCV图像处理(二十二)圆检测
import cv2 as cvimport numpy as npdef detect_circles_demo(image): dst = cv.pyrMeanShiftFiltering(image, 10, 100) cimage = cv.cvtColor(dst, cv.COLOR_BGR2GRAY) circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, m原创 2021-01-23 14:20:38 · 397 阅读 · 0 评论 -
python+openCV图像处理(二十一)直线检测
import cv2 as cvimport numpy as npdef line_detection(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) edges = cv.Canny(gray, 50, 150, apertureSize=3) lines = cv.HoughLines(edges, 1, np.pi/180, 200)#半径步长为1,每次偏转1度,直线最小长度200 for line in原创 2021-01-23 13:58:25 · 398 阅读 · 1 评论 -
python+openCV图像处理(二十)边缘检测
import cv2 as cvimport numpy as npdef edge_demo(image): blurred = cv.GaussianBlur(image, (3, 3), 0)#降噪 gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) # X Gradient xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0) # Y Gradient ygrad = cv.原创 2020-12-27 23:51:35 · 215 阅读 · 0 评论 -
python+openCV图像处理(十九)边缘检测
import cv2 as cvimport 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)原创 2020-12-27 23:50:32 · 210 阅读 · 0 评论 -
python+openCV图像处理(十八)图像金字塔
import cv2 as cvimport numpy as npdef pyramid_demo(image):#图像金字塔 level = 3 temp = image.copy() pyramid_images = [] for i in range(level): dst = cv.pyrDown(temp) pyramid_images.append(dst) cv.imshow("pyramid_down_"原创 2020-12-27 23:49:36 · 144 阅读 · 0 评论 -
python+openCV图像处理(十七)
import cv2 as cvimport numpy as npdef big_image_binary(image): print(image.shape) cw = 256 ch = 256 h, 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原创 2020-12-27 23:48:36 · 124 阅读 · 0 评论 -
python+openCV图像处理(十六)二值化阈值
import cv2 as cvimport 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_bi原创 2020-12-27 23:47:37 · 240 阅读 · 0 评论 -
python+openCV图像处理(十五)模板匹配
import cv2 as cvimport numpy as npdef template_demo(): tpl = cv.imread("1.png") target = cv.imread("2.png") cv.imshow("template image", tpl) cv.imshow("target image", target) methods = [cv.TM_SQDIFF_NORMED, cv.TM_CCORR_NORMED, cv.TM_原创 2020-12-27 23:46:36 · 123 阅读 · 0 评论 -
python+openCV图像处理(十四)直方图反向投影
import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltdef back_projection_demo():#直方图反向投影 image1 = cv.imread("1.png") image2 = cv.imread("2.png") roi_hsv = cv.cvtColor(image1, cv.COLOR_BGR2HSV) target_hsv = cv.cvtColor(i原创 2020-12-27 23:45:21 · 174 阅读 · 1 评论 -
python+openCV图像处理(十三)直方图均衡化
import cv2 as cvimport 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, c原创 2020-12-27 23:44:13 · 163 阅读 · 0 评论 -
python+openCV图像处理(十二)直方图
import cv2 as cvimport numpy as npfrom 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(c原创 2020-12-27 23:43:14 · 169 阅读 · 0 评论 -
python+openCV图像处理(十一)边缘保留滤波
import cv2 as cvimport 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原创 2020-12-01 22:47:36 · 388 阅读 · 0 评论 -
python+openCV图像处理(十)高斯模糊
import cv2 as cvimport numpy as npdef clamp(pv): if pv > 255: return 255 if pv < 0: return 0 else: return pvdef gaussian_noise(image): h, w, c = image.shape for row in range(h): for col in rang原创 2020-11-30 23:59:36 · 545 阅读 · 0 评论 -
python+openCV图像处理(九)模糊操作
import cv2 as cvimport numpy as npdef junzhi_blur_demo(image): dst = cv.blur(image, (5, 5)) cv.imshow("junzhi_blur", dst)def median_blur_demo(image):#去椒盐噪声 dst = cv.medianBlur(image, 5) cv.imshow("median_blur", dst)def custom_blur_de原创 2020-11-30 23:57:25 · 229 阅读 · 0 评论 -
python+openCV图像处理(八)ROI与泛洪填充
import cv2 as cvimport numpy as npdef fill_color_demo(image): copyImg = image.copy() h, w = image.shape[:2] mask = np.zeros([h+2, w+2], np.uint8) cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLO原创 2020-11-30 23:55:21 · 194 阅读 · 0 评论 -
python+openCV图像处理(七)像素运算改变亮度/对比度
import cv2 as cvimport numpy as npdef logic_demo(m1, m2): # 逻辑运算 dst_and = cv.bitwise_and(m1, m2) cv.imshow("logic_and", dst_and) dst_or = cv.bitwise_or(m1, m2) cv.imshow("logic_or", dst_or) image = cv.imread("D:/images/test.jpg")原创 2020-11-30 23:52:51 · 1028 阅读 · 0 评论 -
python+openCV图像处理(六)像素运算
import cv2 as cvimport numpy as npdef add_demo(m1, m2): dst = cv.add(m1, m2) cv.imshow("add_demo", dst)def subtract_demo(m1, m2): # 减 dst = cv.subtract(m1, m2) cv.imshow("subtract_demo", dst)def divide_demo(m1, m2): # 除 dst原创 2020-11-30 23:50:15 · 316 阅读 · 0 评论 -
python+openCV图像处理(五)视频色彩空间转换
import cv2 as cvimport numpy as npdef extrace_object_demo(): capture = cv.VideoCapture("D:/images/color_object.mp4") while(True): ret, frame = capture.read() if ret == False: break; hsv = cv.cvtColor(frame, c原创 2020-11-30 23:48:08 · 374 阅读 · 0 评论 -
python+openCV图像处理(四)色彩空间转换
import cv2 as cvimport numpy as npdef color_space_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) cv.imshow("gray", gray) hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) cv.imshow("hsv", hsv) yuv = cv.cvtColor(image, cv.COLOR_BG原创 2020-11-30 23:45:10 · 212 阅读 · 0 评论 -
基于C++的opencv(十四)目标检测
目标检测一、形状检测直线检测霍夫变换是图像处理中检测是否存在直线的重要算法。#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;void drawLine(Mat &img,vector<Vec2f>lines,double rows,double cols,Scalar scalar,int n)int main(){原创 2020-09-09 23:52:54 · 1224 阅读 · 0 评论 -
基于OpenCV的机器学习(十)神经网络
神经网络神经网络(Neural Networks)是一种模仿生物神经系统的机器学习算法。与生物神经系统相似,人工神经网络也由若干个神经元构成。原创 2020-08-14 00:11:11 · 481 阅读 · 0 评论 -
基于OpenCV的机器学习(九)期望最大值
期望最大值期望最大值(Expectation Maximization,EM)算法是一种能够得到极大似然参数估计的迭代方法。对于一个除了拥有未知参数和可观测变量外,还包含隐含变量的统计模型来说,是无法用极大似然方法直接得到参数的,因为我们不能像极大似然法那样,同时对未知参数和隐含变量求导来求解似然函数。但该模型可以应用EM算法得到,它是通过可观测变量分别求解两个方程,即把第一个方程的解代入第二个方程中,再把第二个方程代入第一个方程中,依次类推,直到收敛为止。...原创 2020-08-14 00:07:56 · 306 阅读 · 0 评论 -
基于OpenCV的机器学习(八)极端随机树
极端随机树极端随机数(Extremely randomized Tree,ET或Extra-Trees)算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:1.随机森林算法应用的是Bagging模型,而ET是使用所有的训练样本得到每颗决策树的,也就是说,每颗决策树应用的是相同的全部训练样本。2.随机森林算法是在一个随机子集内得到的最佳分叉属性,而ET是完全随机地得到分叉值,从而实现对决策树的分叉。...原创 2020-08-13 23:59:25 · 1936 阅读 · 0 评论 -
基于OpenCV的机器学习(七)随机森林
随机森林随机森林(Random Forest)随机森林算法由许多决策树组成,每个 决策树之间是不相关的。而随机森林算法的独特性就体现在“随机”两个字上:通过随机抽取得到不同的样本,来构建每棵决策树,决策树每个节点的最佳分叉属性从由随机得到的特征属性集合中选取。...原创 2020-08-07 23:21:39 · 604 阅读 · 0 评论 -
基于OpenCV的机器学习(六)梯度提升树
梯度提升树可以实现回归、分类和排序。GBT的优点是:特征属性无须进行归一化处理,预测速度快,可以应用不同的损失函数等。GBT包含3个机器学习的优化算法:决策树方法、提升方法和梯度下降法。...原创 2020-08-06 23:33:19 · 248 阅读 · 0 评论 -
基于OpenCV的机器学习(五)AdaBoost
AdaBoost自适应提升(Adaptive Boosting,AdaBoost)算法由来自AT&T实验室的Freund和Schapire,于1995年首次提出。该算法解决了早期Boosting算法的实际执行时遇到的一些问题,而该算法可以作为一种从一系列弱分类器中产生一个强分类器的通用方法。正由于AdaBoost算法的优异性能,Freund和schapire因此获得了2003年度的哥德尔奖。...原创 2020-07-31 23:11:33 · 244 阅读 · 0 评论 -
基于OpenCV的机器学习(四)决策树
决策树决策树是一种非参数的监督学习方法,主要用于分类和回归。决策树的目的是构造一种模型,使之能够从样本数据的特征属性中,通过学习简单的决策规则——IF THEN规则,从而预测目标变量的值。决策树往往采用的是自上而下的设计方法,每迭代循环一次,就会选择一个特征属性进行分叉,直到不能再分叉为止。因此,在构建决策树的过程中,选择最佳(既能够快速分类,又能使决策树的深度最小)的分叉属性是关键所在。这种“最佳性”可以用非纯度(impurity)进行衡量。...原创 2020-07-31 23:06:11 · 333 阅读 · 0 评论 -
基于C++的opencv(十三)特征检测与匹配
SURF,英文全称是SpeededUp Robust Features,直译为“加速版的具有滤棒性的特征”算法,SURF是尺度不变特征变换算法(SIFT算法)的加速版。绘制关键点:drawKeypoints()函数绘制匹配点:drawMatches()函数实现快速高效匹配(快速最近邻逼近搜索函数库,Fast Library for Approximate Nearest Neighbors,FLANN)找到最佳匹配:DescriptorMatcher::match方法...原创 2020-05-25 23:56:08 · 1748 阅读 · 0 评论 -
基于C++的opencv(十二)角点检测
角点检测(Corner Detection)是计算机视觉系统中用来获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中,也称为特征点检测。角点检测被定义为两条边的交点,更严格的说法是,角点的局部领域应该具有两个不同区域的不同方向的边界。而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。...原创 2020-05-25 23:47:22 · 1712 阅读 · 0 评论 -
基于C++的opencv(十一)直方图与匹配
在统计学中,直方图(Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该统计样本对应的某个属性的度量。图像直方图(Image Histogram)是用以表示数字图像种亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、较白的区域。直方图的意义如下:1.直方图是图像中像素强度分布的图形表达方式;2.它统计了每一个强度值所具有的像素个数。...原创 2020-05-24 23:40:22 · 549 阅读 · 0 评论 -
基于C++的opencv(十)图像轮廓与图像分隔修复
在opencv中findContours()函数从二值图像中查找轮廓。寻找轮廓:findContours()函数绘制轮廓:drawContours()函数凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。简单来说,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。理解物体形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。寻找凸包:convexHull()函数...原创 2020-05-24 23:31:15 · 1011 阅读 · 0 评论 -
基于C++的OpenCV(九)图像变换
边缘检测的一般步骤:第一步:滤波边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核函数对图像灰度矩阵的每一点进行加权求和。第二步:增强增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来。第三步:检测经过增强的图像,往往领域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是要找原创 2020-05-22 23:46:49 · 771 阅读 · 0 评论