opencv
onj123
这个作者很懒,什么都没留下…
展开
-
opencv:DNN模块加载机器学习模型
DNN模块从OpenCV 3.3开始,dnn模块加入到主仓库中,目前支持Caffe、TensorFlow、Torch、PyTorch等深度学习框架。protobufGoogle Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法,类似json/xml。TensoFlow模型1. 模型文件 a. 二进制的protobuf格式描述文件:.pb b. protobuf格式文本文原创 2020-05-16 00:21:23 · 1884 阅读 · 0 评论 -
opencv图像处理:提取对象
步骤1. 转为灰度图像2. 预处理(滤波降噪/直方图均衡化/傅里叶变换等)3. canny边缘提取(二值图像)4. 开操作或膨胀(去除毛刺)5. 检测外轮廓6. 轮廓最小外接矩形/圆7. 通过轮廓长宽比,宽高范围,找到有价值的区域提取边缘用模板扩大差异,如果是边缘,则幅度比较大1. sobel算子:cv2.Sobelgx = [[-1,0,1],[-2,0,2],[-1,0...原创 2020-03-27 17:42:07 · 517 阅读 · 0 评论 -
opencv图像处理:图像预处理
转灰度图1. 取b通道(人眼对波长为550nm左右的黄绿色最为敏感)2. 取b/g/r的平均值gray=(b+g+r)/3,小心数据溢出3. gray=r*0.299 + g*0.587 + b*0.114,浮点运算比较慢,为了加快速度可以用近似值gray=(r*3 + g*6 + b*1)/104. cv2.cvtColor改变亮度1. 线性:y=ax+b2. 分段线性改变对...原创 2020-03-27 17:40:50 · 4071 阅读 · 0 评论 -
十四、轮廓
查找轮廓基于图像边缘提取的基础寻找对象轮廓,边缘提取的阈值选定会影响轮廓发现的结果void findContours( InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset = Point());image:图像(uint8)contours:查找轮廓mode:轮廓...原创 2020-03-27 17:12:42 · 109 阅读 · 0 评论 -
十三、边缘提取
图像边缘:找到像素值差异比较大的地方1. 对图像进行一阶求导(即Sobel),最大变化处的绝对值最大值2. 对图像进行二阶求导(即laplance),最大变化处的值为零算子1. Sobel算子原理:权重的差异扩大了差异(当kernal覆盖的区域的像素值一样时,kernel覆盖的像素卷积和为0(即锚点的值为0);当差异很小时,卷积和很小;当差异很大时,卷积和绝对值很大。) a. X 方向...原创 2020-03-27 17:11:53 · 17371 阅读 · 0 评论 -
十二、阈值
图像二值化:元素值转为0/255注意:图像只能是单通道8位灰度图像double threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type );src:图像dst:目标图像threshold:设定的阈值maxval:当灰度值大于(或小于)阈值时将该灰度值赋成的值type:二值化...原创 2020-03-27 17:09:18 · 277 阅读 · 0 评论 -
十一、图像大小
上采样(图像放大)void pyrUp( InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );src:图像ds:目标图像dstsize:图像的2倍大小,不能是其它倍数borderType:边界填充模式降采样(图像缩小)原理:进行高斯模糊...原创 2020-03-27 17:08:48 · 245 阅读 · 0 评论 -
十、形态学操作
形态学操作膨胀,腐蚀,开运算,闭运算获取结构元素Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));shape:形状(矩形MORPH_RECT,十字MORPH_CROSS,椭圆MORPH_ELLIPE)ksize:结构元素大小anchor:锚点位置膨胀原理:结构元素可以是任意形状...原创 2020-03-27 17:08:11 · 191 阅读 · 0 评论 -
九、滤波
图像滤波尽量保留图像细节特征的条件下对目标图像的噪声进行抑制(即去除图像中一些不重要的细节)实现方式:模板卷积1. 卷积算子计算是线性(线性滤波)2. kernel本质是固定大小的矩阵数组,其中心点称为锚点3. 卷积过程:模板从左到右,从上到下,移动,把kernel覆盖的像素和kernel对应位置的值相乘再求和(包括锚点),赋值给锚点步骤: a. 将模板在图中沿一定方向逐点移动,并将...原创 2020-03-27 17:07:19 · 124 阅读 · 0 评论 -
八、图像合成分解
图像混合两幅图像对应元素叠加void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);src1:图像1alpha:图像1权重src2:图像2beta:图像2权重gamma:偏移量dst:输出图...原创 2020-03-27 17:06:11 · 675 阅读 · 0 评论 -
opencv:七、鼠标
滚动条1. 响应滚动条的回调函数void on_Trackbar(int value, void*)value:进度条当前值2. 创建滚动条int createTrackbar(const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChang...原创 2019-09-30 17:55:51 · 69 阅读 · 0 评论 -
python+opencv图片分割字符
把图片中的字符分离出一张张字符图片(缺陷:字符不能重合)# -*- coding:utf-8 -*-import numpy as npimport cv2def car(): img = cv2.imread("C:\\Users\\Administrator.000\\Desktop\\a.png") grayImage = cv2.cvtColor(img, cv2...原创 2019-01-26 19:40:29 · 7442 阅读 · 11 评论 -
opencv 安装
opencv 安装简介OpenCV(Open Source Computer Vision Library):开源计算机视觉库由Intel公司贡献,免费应用在商业和研究领域,SDK支持java,python,ios,android等官网:https://opencv.org其它图像处理工具:matlab,halcon(收费)主要模块core 基础数据类型,矩阵操作,绘图highgu...原创 2019-05-31 19:01:10 · 202 阅读 · 0 评论 -
opencv基本操作(图像加载、显示、修改、保存)
opencv基本操作(图像加载、显示、修改、保存)加载Mat imread( const String& filename, int flags = IMREAD_COLOR );加载图像文件成一个mat对象filename:文件名称flags:加载图像的类型(flags<0原图,flags=0灰度图像(单通道灰度图像),flags>0彩色图像(3通道))加载过程:...原创 2019-05-31 19:11:23 · 918 阅读 · 0 评论 -
opencv:二、opencv基本操作(图像加载、显示、修改、保存)
图像加载Mat imread( const String& filename, int flags = IMREAD_COLOR );加载图像文件成一个mat对象filename:文件名称flags:加载图像的类型(flags<0原图,flags=0灰度图像(单通道灰度图像),flags>0彩色图像(3通道))加载过程:1. 文件读取2. 封装格式解析(jpg p...原创 2019-09-30 17:52:03 · 157 阅读 · 0 评论 -
opencv:三、图像创建
图像数据结构1. IplImage:2001年发布opencv后一直存在,需要自己分配管理内存。2. Mat:opencv2.0引入,自动分配内存,不存在内存泄漏。Mat 是一个类,分为头部和数据部分,矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵的指针。注意:Mat通过引用计数来释放内存创建图像:构造函数1. Mat::Mat(int rows, in...原创 2019-09-30 17:53:02 · 1274 阅读 · 0 评论 -
opencv:四、图像本质及遍历
图像的本质图像本质上二维矩阵,对图像处理就是对图像的矩阵操作Mat m(行,列,CV_8UC3,Scalas(B,G,R))3*3 像素的3通道的图像可得到3行9列的矩阵访问图像元素1. 获取图像像素指针Mat.ptr<uchar>(int i=0) 索引i表示第i行获取row行指针const uchar* cur = img.ptr<uchar>(row)...原创 2019-09-30 17:53:41 · 235 阅读 · 0 评论 -
opencv:五、图像元素加减乘除
图像像素点相加1. 两幅图像叠加(y=a*x1+(1-a)*x2)2. 去除“叠加性”随机噪音(同一场景的多个图像相加再求平均值)图像像素点相减作用:1. 两幅图像对应元素相减去掉背景2. 检测同一场景两幅图像之间的变化图像像素点相乘1. 图像局部显示(用二值蒙板图象与原图象做乘法)2. 像素值线性运算:y=ax+b(调整亮度)改进:分段线性运算(不同的区域使用不同的a,b)...原创 2019-09-30 17:54:23 · 1113 阅读 · 0 评论 -
opencv:六、几何图像
Point(x,y) 2D平面上的点线段void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);img:图像pt1:起点pt2:终点color:颜色thickness:线...原创 2019-09-30 17:55:10 · 97 阅读 · 0 评论 -
python+opencv
视频播放/图片合成视频/常用的图像处理等操作# -*- coding:utf-8 -*-import osimport threadingimport cv2import numpy as np'''pip install opencv-python opencv视觉库'''class Producer(threading.Thread): """线程播放视频"&quo原创 2019-01-26 19:40:50 · 209 阅读 · 1 评论