OpenCV4-Python
文章平均质量分 82
传统图像处理Opencv4学习笔记
落叶随峰
菜鸡大学生一枚,感兴趣方向:C++,嵌入式,PCB设计,目标检测,视频语义分割等。
展开
-
手把手带你在Linux上安装带GPU加速的opencv库(C++版本)
本文旨在详细指导Linux用户在系统上安装带有GPU加速功能的OpenCV库,专注于C++版本。我们将从下载OpenCV安装包开始,逐步进行环境依赖的安装,并最终完成OpenCV库的安装和配置。通过本文,读者将能够充分利用GPU加速功能,提升OpenCV图像处理的速度和效率。原创 2024-02-19 13:58:36 · 2917 阅读 · 2 评论 -
结语【To be continued】
结语Opencv-python专栏开始于2022.1.24,结束于2022.4.15原计划1个半月,实际上用了3个月,才恰好能入门未来也许会更新,但不会是主线主要学习了图像预处理和两个特征检测:Haar、Hog鉴于现在的计算机视觉潮流是基于学习的方法,所以传统图像处理的方式在工业部署拥有着巨大的优势,但对于在校大学生来说,如果想参加Kaggle、阿里天池这类比赛,还是要进阶到机器学习、神经网络这种处理方式而学习opencv的目的,首先是了解图像处理的基本知识,如插值,模糊,特征等,其次是优化神经原创 2022-04-15 21:18:12 · 2290 阅读 · 0 评论 -
CV17 HOG特征提取算法
Hog(Histograms of Oriented Gradients,又称方向梯度直方图)概念出自于一篇2005年CVPR论文(Author:Navneet Dalal、Bill Triggs),内容为:使用HOG+SVM做行人检测由于它的巨大成功和可靠性,HOG 已成为计算机视觉中应用最广泛的目标检测算法之一原创 2022-04-15 08:57:28 · 2773 阅读 · 1 评论 -
CV16 人脸检测:Haar级联
本章将讲述CV史上最经典的算法Haar级联🤤什么是Haar级联?图片和视频中的人脸检测face_cascade.detectMultiScale()函数2001年,Viola和Jones两位大牛发表了经典的《Rapid Object Detectionusing a Boosted Cascade of Simple Features》和《Robust Real-Time Face Detection》,在AdaBoost算法的基础上,使用Haar-like小波特征和积分图方法进行人脸检测。他们设原创 2022-04-05 14:10:44 · 4297 阅读 · 0 评论 -
CV15 轮廓检测:霍夫变换原理及应用
如果可以用数学形式表示形状,则霍夫变换是一种检测任何形状的流行技术。即使形状有些破损或变形,也可以检测出形状。霍夫变换时在极坐标系上寻找一个点,从而找到一条线,一个圆。在本节中,你将学习:霍夫变换基本原理,以及在Opencv上如何运用原创 2022-03-14 13:06:36 · 4887 阅读 · 2 评论 -
CV14 轮廓检测:入门
轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测和识别的有用工具边界、最小矩形及最小外接圆轮廓检测、凸轮廓Douglas-Peucker算法原创 2022-03-10 21:51:33 · 596 阅读 · 0 评论 -
CV13 图像分辨率操作(图像金字塔与resize()函数)
通常,我们过去使用的是恒定大小的图像。但是在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,当在图像中搜索某些东西(例如人脸)时,我们不确定对象将以多大的尺寸显示在图像中。在这种情况下,我们将需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索对象。这些具有不同分辨率的图像集称为“图像金字塔”(因为当它们堆叠在底部时,最高分辨率的图像位于顶部,最低分辨率的图像位于顶部时,看起来像金字塔)原创 2022-03-07 00:39:56 · 5796 阅读 · 0 评论 -
CV12 Canny边缘检测原理
Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge detection)解释这项技术如何工作。通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。原创 2022-03-01 21:19:40 · 3040 阅读 · 0 评论 -
CV11 形态学转换(侵蚀、扩张、开运算/顶帽、闭运算/黑帽和形态学梯度)
形态变换是一些基于图像形状的简单操作。通常在二进制图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定**操作性质的结构元素**或**内核**。两种基本的形态学算子是侵蚀和膨胀。然后,它的变体形式(如“打开”,“关闭”,“渐变”等)也开始起作用。在下图的帮助下,我们将一一看到它们:原创 2022-02-23 16:52:43 · 743 阅读 · 2 评论 -
CV10 图像模糊(均值、高斯、中值、双边滤波)
通过将图像与低通滤波器内核进行2D卷积来实现图像模糊。这对于消除噪音很有用。它实际上从图像中消除了高频部分(例如噪声,边缘)。因此,在此操作中边缘有些模糊。(有一些模糊技术也可以不模糊边缘)。OpenCV主要提供四种类型的模糊技术:均值模糊、高斯模糊、中值模糊和双边滤波模糊。当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。一 均值模糊理论推导均值模原创 2022-02-16 14:13:38 · 2585 阅读 · 0 评论 -
CV9 2D卷积与图像滤波
一 卷积简介假设你的老板命令你干活,你却偷偷上班划水摸鱼,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,由于老板的力度掌控的不那么好,脸上的包一开始肿的程度也不一样(输入信号不恒定),并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入原创 2022-02-15 11:16:55 · 1078 阅读 · 0 评论 -
CV8 OpenCV环境下实现大津算法
一 大津算法简介大津算法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。大津算法最终的目的,就是求一个标准的全局阈值区分前景和背景(小于该阈值的为前景。大于该阈值的为背景),使得前景和背景像素的灰度值方差之和最大。因为方差越大,相关性越小,黑白越分明。大津算法的优势及劣势:对于一些光照变化的图像有较好的滤除性,但需注意,光照部分需影响图像原创 2022-02-13 16:51:01 · 2430 阅读 · 0 评论 -
CV7 颜色追踪和图像阈值
一 颜色追踪HSV:H(hue)是色调,S(saturation)是饱和度,V(value)表示黑暗的程度因为在HSV中比在BGR颜色空间中更容易表示颜色,所以我们需要将BGR图像转换成HSV,用来提取一个有颜色的对象在下面这段程序中,我们将提取一个红色的对象方法如下:取视频的每一帧转换颜色空间(从BGR到HSV)对HSV图像设置红色的阈值单独提取红色对象import cv2import numpy as npcap = cv2.VideoCapture(0)while(1)原创 2022-02-10 22:07:42 · 3806 阅读 · 0 评论 -
CV6 图像的算术运算(以简单的抠图为例)
一 图像加法OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算(无论多大都只能加到max值),而Numpy加法是模运算>>> x = np.uint8([250])>>> y = np.uint8([10])>>> print( cv.add(x,y) ) # 250+10 = 260 => 255[[255]]>>> print( x+y ) # 250+10 = 260 % 256 = 4[4原创 2022-02-07 21:46:36 · 2229 阅读 · 0 评论 -
CV5 numpy入门及图像的基本操作
一 访问和改变像素点的值单独对一个像素操作# 通过行列坐标来访问像素值# 定义图片的一个像素点px = img[100,100]# 打印出这个像素的BGR数值print(px)仅访问像素点的单个通道# 仅访问蓝色像素blue = img[100,100,0]print(blue)改变像素点的颜色# 对像素点单独变色img[100,100] = [255,255,255]print(img[100,100])调用函数改变像素print(img.item(1原创 2022-02-07 12:24:48 · 2010 阅读 · 0 评论 -
CV4 基于鼠标回调函数及轨迹调色的简单人机交互应用
问:使用轨迹栏创建颜色和画笔半径可调的Paint应用程序?一 鼠标回调函数创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。因此,下列这段代码我们的鼠标回调函数可以做一件事——在我们双击的地方绘制一个圆圈import cv2import numpy as np#定义一个鼠标回调函数,想要知道更多的鼠标事件,可通过以下屏蔽的代码实现# import cv2 as cv# events = [i for i in dir(cv) if 'EVENT' in i]#原创 2022-02-04 20:52:10 · 2977 阅读 · 1 评论 -
CV3 绘制OpenCV的徽标
问:尝试使用OpenCV中可用的绘图功能创建OpenCV的徽标?一 基础知识import cv2import numpy as np# 创建一个512*512的3通道图像img = np.zeros((512,512,3),np.uint8)# 画线,输入参数依次为:1.图片,2.线的起点,3.线的终点,4.颜色,5.线宽cv2.line(img,(0,0),(299,511),(255,0,0),5)# 画矩形,输入参数依次为:1.图片,2.左上顶点,3.右下顶点,4.颜色,5.线宽原创 2022-02-03 21:41:06 · 1697 阅读 · 0 评论 -
CV2 在OpenCV中加载彩色图像并将其显示在Matplotlib中?
问:在OpenCV中加载彩色图像并将其显示在Matplotlib中?我的答案import cv2import numpy as npfrom matplotlib import pyplot as pltimg1 = cv2.imread('rose.jpg',cv2.COLOR_BGR2GRAY) #以BGR格式读取图片# opencv:BGR; Matplotlib:RGB# opencv:蓝0绿1红2cv2.imwrite('homework.jpg',img1[:,原创 2022-02-02 21:28:19 · 2138 阅读 · 0 评论 -
CV1 计算机眼中的图像
一 基本读写图像文件无论哪种格式,每一个像素都会有一个值,但不同格式表示像素的方式有所不同numpy.zero()函数调用该函数,可以通过二维NumPy数组来简单创建一个黑色的正方形图像img=numpy.zeros((3,3),dtype=numpy.uint8)控制台print一下,可得[[000][000][000]][[0 0 0] [0 0 0] [0 0 0]][[000][000][000]]该输出有两个[],说明该图像有两条通道,每一个像素都由一个8-bit整数表原创 2022-01-24 23:49:53 · 2298 阅读 · 0 评论