![](https://img-blog.csdnimg.cn/0d8b8bf19188434197ccffaa207b0f0e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Opencv学习笔记
文章平均质量分 58
Opencv个人学习笔记
稚子
保持热爱,奔赴山海。
展开
-
24. 图像拼接大作业
准备两张有关联关系的图片课后作业:去除两张图片相接的边缘,对图像进行裁剪去除黑边(1)图像合并的步骤首先找到中心点原创 2022-06-20 11:27:54 · 1450 阅读 · 0 评论 -
23. Opencv——图像拼接项目
应用场景:1.图像搜索,如以图搜图,提取图片中的主要特征点进行搜索2.拼图游戏3.图像拼接,将两张有关联的图拼接到一起拼图方法:1.寻找特征2.特征点唯一,可追踪,能比较3.平坦部分很难找到它在原图中的位置4.边缘相比平坦要好找一些,但也不能一下确定具体位置5.角点可以一下就能找到其在原图的位置图像特征就是指有意义的图像区域,具有独特性、易于识别性,比如角点,斑点以及高密度区在特征中最重要的是角点灰度梯度的最大值对应的像素、两条线的交点、极值点(一阶导数最大值,但二阶导数为0)第一种情况:对于这个窗口来说,原创 2022-06-20 09:28:51 · 1627 阅读 · 0 评论 -
22.【实战】车辆统计
理论知识见上一节,最终效果如下(1)窗口的展示(2)图像/视频的加载(3)基本图形的绘制(4)车辆识别 基本图像运算与处理、形态学处理、轮廓查找原创 2022-06-17 20:13:45 · 4211 阅读 · 9 评论 -
21. 目标识别 — 车辆统计项目
什么是图像轮廓?具有相同颜色或强度的连续点的曲线轮廓的作用:注意:1.为了检测的准确性,需要先对图像进行二值化或Canny操作使用 print(img.shape) 查看图片属性 2.画轮廓时会修改输入的图像如果不想改变原图像,则把原图像进行深拷贝一份findContours(img, mode, ApproximationMode...)该API有两个返回值 contours和hierarchycontours 查找到的所有轮廓的列表hierarchy 层级,查找到的轮廓之间的关系一般情况下选择使用原创 2022-06-14 21:54:45 · 395 阅读 · 0 评论 -
20. Opencv中的形态学处理
形态学处理方法:将图像的每个像素变成两种值,如0,255全局二值化:画一条线,所有的像素均与这条线进行对比,低于为0,高于为255局部二值化:把图形分为不同的区域,在每个区域内再进行二值化处理,主要针对光线不好的图像。threshold(img, thresh, maxVal, type)img 灰度图像thresh 阈值maxVal 超过阈值,替换成maxValtype 由于光照不均匀以及阴影的存在,只有一个阙值会使得在阴影处的白色被二值化成黑色,此时适合采用 自适应阙值二值化adaptiveTh原创 2022-06-14 15:42:07 · 729 阅读 · 0 评论 -
19.高通滤波
上一节为低通滤波,最主要的作用是去噪高斯滤波去除高斯噪声中值滤波去除椒盐噪声双边噪声用于美颜高通滤波最主要的作用是用于检测边缘常见的高通滤波:对于3*3的卷积核,Sobel(索贝尔)没有Scharr(沙尔)好,因为Scharr(沙尔)可以检测出更细的边缘线。Sobel(索贝尔)比较粗糙缺点:计算边缘时,只能求一个方向,要么是横轴,要么是纵轴,最后再相加的出最终结果缺点:对噪声比较敏感,在其内部没有降噪的功能,因此在使用前,需要进行降噪处理。Sobel(src, ddepth, dx, dy, ksize =原创 2022-06-13 16:52:45 · 5490 阅读 · 0 评论 -
18.方盒滤波与均值滤波
图像卷积APIfilter2D(src, ddepth, kernel, anchor, delter, borderType)参数含义:src 滤波对象ddepth 滤波后的图像位深,一般设为-1,跟原图像保持一致kernel 卷积核(低通滤波,高通滤波)anchor 锚点,可以不设delter 默认为0borderType 边界类型,一般情况为默认值例如一个5*5的卷积核,作用使图像变平滑方盒滤波卷积核参数a的作用:normalize = true, a = 1/W * H 此时为均值滤波normali原创 2022-06-13 15:39:04 · 927 阅读 · 0 评论 -
17.Opencv中的滤波器——图像滤波
图像滤波的作用:将一幅图像通过图像滤波得到另一幅图像按照深度学习的说法:其中滤波器又称为卷积核,滤波的过程称为卷积原创 2022-04-28 22:02:27 · 3450 阅读 · 0 评论 -
16.图像的仿射变换
什么是仿射变换?仿射变换是图像旋转、缩放、平移的总称仿射变换API :warpAffine(src,M,dsize,flags,mode,value)src:源图像M:变换矩阵dsize 输出尺寸大小flag:与resize中的插值算法一致(见上一篇文章)mode:边界外推法标志value:填充边界的值1.图像的平移—平移矩阵矩阵中的每个像素由(x,y)组成图像的平移就是在(x,y)上加值因为像素是由两个元素(x,y)组成,所以变换矩阵是2*2矩阵平移向量原创 2022-04-27 21:19:12 · 740 阅读 · 0 评论 -
15.Opencv中图像基本变换
1.图像的缩放resize(src,dst,dsize,fx,fy,interpolation)src:操作图像dst:输出,在python中可以不用dsize:目标大小fx:x轴的缩放因子fy:y轴的缩放因子,如果定义了dsize则不需要设置fx fyinterpolation:插值算法常用缩放算法:INTER_NEAREST 邻近插值,速度快,效果差INTER_LINEAR 双线性插值,原图中的4个点,相比于邻近插值,速度快,效果好,为默认插值INTER..原创 2022-04-27 20:12:07 · 2914 阅读 · 0 评论 -
14.Opencv大作业2——为图像添加水印
设计步骤:#1.引入一张图片#2.要有一个LOGO#3.计算图片在什么地方添加,在添加的地方地方变成黑色#4.利用add,将logo与图片叠加在一起示例教程:#1.引入一张图片#2.要有一个LOGO#3.计算图片在什么地方添加,把需要添加的地方变成黑色,变成黑色的方法,先取反,再进行与#4.利用add,将logo与图片叠加在一起import cv2import numpy as np#导入需要添加LOGO的图片img = cv2.imread('C:\\Users原创 2022-04-27 16:19:42 · 1131 阅读 · 1 评论 -
13.Opencv中的图像运算
1.两个图像相加2.两个图像相减3.图像乘与图像除原创 2022-04-27 10:35:21 · 511 阅读 · 0 评论 -
12.Opencv大作业——实现鼠标绘制基本图形
原创 2022-04-26 19:28:48 · 3446 阅读 · 0 评论 -
11.Opencv实现图形的基本绘制
1.画线line(img,开始点,结束点,颜色,...)img:在那个图像上画线开始点、结束点:指定线的开始与结束位置颜色、线宽、线型shift:按坐标缩放比例,一般不需要该参数需要注意坐标为(x,y)import cv2import numpy as npimg = np.zeros((480,640,3),np.uint8)cv2.line(img,(10,20),(300,400),(0,0,255),5,4) #画线坐标为(x,y) 5为线宽,4为线型锯齿(原创 2022-04-26 16:50:26 · 1773 阅读 · 0 评论 -
10.Opencv的重要结构体Mat—深拷贝与浅拷贝
Mat是什么?是一个矩阵,灰色图像2通道,彩色图像3通道。Mat的优点:可以Numpy以矩阵的方式进行访问,操作方便。Mat深拷贝与浅拷贝拷贝Mat时默认为浅拷贝,只拷贝Header中的内容,数据不变Mat浅拷贝Mat AA = imread(file, IMREAD_COLOR)Mat B(A);B与A的Header不同,但指向的数据相同Mat深拷贝C++中实现方式有两种cv ::Mat::clone()cv::Mat::copyTo().原创 2022-04-26 15:34:18 · 3732 阅读 · 0 评论 -
9.图像操作的基石Numpy
目录Numpy基本操作1.创建矩阵ArrayzerosfullidentityOpencv中用到的矩阵都要转换成Numpy数组Numpy是一个经高度优化的Python数值库Numpy基本操作图形的操作就是对矩阵的操作1.创建矩阵创建数组array()创建全0数组zeros()/ones,ones为创建全为1的数组创建全值数组full()创建单元数组identity/eye(),单位矩阵,eye()创建非方阵型的单位矩阵Arrayimpor原创 2022-04-25 21:33:53 · 742 阅读 · 0 评论 -
8.opencv色彩空间转换
import cv2cv2.namedWindow('color',cv2.WINDOW_NORMAL)def callback(): passimg = cv2.imread('C:\\Users\\Mengyang\\Desktop\\Myopencv\\image\\111.png')colorspaces=[cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY,cv2.COLOR...原创 2022-04-25 10:31:56 · 933 阅读 · 0 评论 -
7.opencv中的色彩空间——基础知识
核心知识:1.色彩空间变换2.像素访问3.矩阵的+ - * /4.基本图形的绘制RGB:人眼的色彩空间opencv默认使用BGR的排列顺序HSV:色相、饱和度、明亮度HSB:与上为一种体系HSL:与上面两个有差别YUV:视频领域每一个方格代表一个像素,每一个像素都由三个数值组成选用的不同的色彩空间,会造成图片颜色不同HSVHue:色相,即色彩,如红色,蓝色Saturation:饱和度,颜色的纯度value:明度以红色为例:.原创 2022-04-25 09:47:25 · 441 阅读 · 0 评论 -
6.opencv中的TrackBar控件
createTrackbar 创建Trackbar控件getTrackbarPos 获取Trackbar当前值createTrackbar 参数trackbarname 控件名字winname 窗口名字value:trackbar当前值count:最小值为0,最大值为countcallback,userdata 一般为空的回调函数,空的值getTrackBarPos 参数输入参数:trackbarname 控件名字winname 所在窗口名字输出:当前值...原创 2022-04-24 17:20:09 · 822 阅读 · 0 评论 -
5.Opencv鼠标控制
设置鼠标回调函数1. setMouseCallback(winname,callback,userdata)参数1:窗口名字参数2:自定义回调函数,执行自己设定的程序逻辑参数3:想要传的参数,默认为none2. callback(event,x,y,flags,userdata)回调函数的名字可以随意取参数1:鼠标点击事件,点击了左键还是右键,或是中键参数2:鼠标点击位置x,y参数3:通过flags设置组合键参数4:传递的参数event:鼠标移动、按下左键x,原创 2022-04-24 16:41:45 · 682 阅读 · 0 评论 -
4.通过Opencv采集摄像头视频数据
VideoCapture() 虚拟采集器,一般设备号从0开始cap.red() 读取视频帧返回值有两个,第一个为状态值,读到帧为true第二个值为视频帧cap.release() 释放资源原创 2022-04-24 15:59:57 · 4640 阅读 · 6 评论 -
3.通过Opencv读取和保存图片
1. namedWindow() 创建一个窗口并起一个名字2.imshow() 显示窗口3.destroyAllWindows() 销毁所有窗口,释放CPU资源4.resizeWindow 设置窗口大小,让图片适应窗口,默认大小为图片大小import cv2from cv2 import waitKey #引入opencv库cv2.namedWindow('new',cv2.WINDOW_NORMAL)cv2.resizeWindow('new',480,480) #设置窗.原创 2022-04-24 11:16:46 · 1430 阅读 · 0 评论 -
2.使用Python开发Opencv
opencv开发工具:pycharm、vscode,我选择的为采用vscode进行开发1.vscode安装下载安装官网下载:Visual Studio Code - Code Editing. Redefined安装python插件原创 2022-04-23 17:32:47 · 2972 阅读 · 0 评论 -
1.Windows下搭建环境步骤
1.下载并安装python3查看电脑是否已经安装python,操作方法:win+r,启动命令窗口,输入cmd,输入python2.配置python3环境变量3.通过pip命令安装numpy、matplotlib和opencv库原创 2022-04-23 15:31:33 · 927 阅读 · 0 评论