opencv基操与实战
文章平均质量分 77
学习图像处理时用到的一些opencv库函数,以及一些c++的语法总结.
拾牙慧者
会点c++、python;
展开
-
【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)
目录修改完BUG后的程序以及效果优化思路,增强正确识别率(待验证)修改完BUG后的程序以及效果修改代码后的测试结果:(利用连通域面积将明显比本张测试图的瓶子要小的模板提前去除,减少误判)这样下来,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了。代码:#pragma region 匹配主程序//////匹配主程序//获取瓶子外轮廓的函数//输入:原图灰度图 canny阈值 输出:轮廓图 mask2图void get_external_Contours_function(Mat原创 2020-08-25 21:29:28 · 369 阅读 · 0 评论 -
【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)
思路思路1:使用findContours函数,设置轮廓为最外部RETR_EXTERNAL,结果发现结果仍然是所有轮廓。思路2:先二值化,然后进行闭操作,然后canny,得到的轮廓确实比之前少很多,但是有个缺点:瓶子的边缘由于二值化的影响失真了。 原图 直接canny得到的图 二值化后canny图 思路3:先二值化,然后进行闭操作,然后填充较小的黑色区域,然后再进行腐蚀操作,得到了比原本瓶子要小一圈的mask,然后对canny后的图原创 2020-08-24 23:19:26 · 464 阅读 · 0 评论 -
【视觉项目】【day2】8.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)
目录均衡化代码模板图片按照大小排序总代码测试效果新思路由于模板匹配是像素之间的比对,所以不同光照下的像素灰度值也会不同所以在比对之前,我们需要对测试图和模板图进行直方图均衡化,这一步可以先实现。今天将采用批量处理的方式,来检测模板匹配的准确度。这里发现,最好还是先对所有测试图均衡化再截取模板。因为测试图和模板图分开来均衡化是不合理的。equalizeHist( src, dst );该函数只支持单通道的均衡化,对于彩色图像来说可以先将多通道分离成单通道,再合并成多通道。均衡化代码for原创 2020-08-24 13:52:39 · 333 阅读 · 0 评论 -
【视觉项目】【day1】8.20号实验记录(初步使用模板匹配)
模板匹配利用模板匹配可以框定出瓶子,但是却不能分辨哪种瓶子是哪种瓶子。对同一张图片用不同的模板去进行匹配,选择匹配度最高的!而且这种匹配受到模板大小的限制。若是摄像头固定,视角固定,那这个问题可以解决单张图的代码#include <opencv2/opencv.hpp>#include "opencv2/features2d.hpp"#include <vector>#include <algorithm>#include <iostream>原创 2020-08-24 14:37:54 · 342 阅读 · 0 评论 -
【视觉项目】【day3】8.22号实验记录(利用canny检测之后的来进行模板匹配)
【day3】8.22号实验记录(几乎没干正事的一天,利用canny检测之后的来进行模板匹配)今天没搞代码,主要是问研究生学长工业摄像头的接法的,学长也不知道,明天问问老师。。。晚上搞了一下canny之后的模板匹配(基于边缘的ncc模板匹配)。失误率还是很高;步骤:1、对测试图进行canny边缘检测,blurSize:5,thred1:40,thred2=thred1*22、截取出模板图3、对模板图进行精简化,每个形状留下一个模板4、模板匹配,利用最后一个method5、观察结果在此之前发原创 2020-08-24 13:54:31 · 433 阅读 · 0 评论 -
【视觉项目】基于梯度的NCC模板匹配代码以及效果
文章目录流程分析工程代码【1】NCC代码【Ⅰ】sttPxGrdnt结构体【Ⅱ】sttTemplateModel模板结构体【Ⅲ】calcAccNCC计算ncc系数函数【Ⅳ】searchNcc NCC模板匹配函数【Ⅴ】searchSecondNcc 二级搜索:在某一特定点周围再以步进为1搜索【2】测试图转外轮廓【Ⅰ】孔洞填充(默认背景为黑)【Ⅱ】获取瓶子外轮廓【Ⅲ】测试图转外轮廓【3】总代码总结流程分析#预处理部分1、将测试图转为150:100,缩小图片尺寸2、截取备用模板图3、加载模板到结构体ve原创 2020-08-27 23:41:50 · 2359 阅读 · 6 评论 -
【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理
NCC与matchTemplate()函数中match_method = TM_CCOEFF_NORMED是否一样?先看公式: TM_CCOEFF_NORMED NCC TM_CCOEFF_NORMED:归一化的相关性系数匹配方法NCC:normalized cross correlation:归一化互相关系数公式是一样的。参考:模板匹配的几种方法对canny图使用matchTemplate()函数与基于梯度的NCC算法原创 2020-08-26 22:09:47 · 934 阅读 · 0 评论 -
opencv模板匹配
matchTemplate函数参数模板匹配是通过模板在采集到的原图像进行滑动寻找与模板图像相似的目标。模板匹配不是基于直方图的方式,而是基于图像的灰度匹配。6种匹配度量方法:平方差匹配法CV_TM_SQDIFF归一化平方差匹配法CV_TM_SQDIFF_NORMED相关匹配法CV_TM_CCORR归一化相关匹配法CV_TM_CCORR_NORMED系数匹配法CV_TM_CCOEFF化相关系数匹配法CV_TMCCOEFF_NORMEDmatchTemplateDemo代码框选出模板后原创 2020-08-20 14:53:29 · 747 阅读 · 0 评论 -
数字图像课程工程大作业分析
在连续的视频中对火焰及水柱的轨迹检测,效果如图。提示:1、火焰可利用亮度和颜色2、水柱的轨迹需要先用背景差分获得水柱的连通域,然后利用连通域上的像素点进行曲线的拟合,水枪的位置视为已知,即可以手动活动坐标。1、火焰检测我们先截一张图,观察HSV三个通道图长什么样子:观察之后决定从S通道着手,首先确定火焰的位置是固定不变的(总是在右下角)对S通道的图片进行二值化获得二值图,再通过限制像素位置,排除干扰:对灰度图进行二值化,发现限制200时,字的影响消失...原创 2020-06-02 23:37:13 · 1159 阅读 · 5 评论 -
Opencv实战【4】——图片动漫化处理
目录动漫化风格的特点处理手段代码实现效果总结动漫化风格的特点(1)动漫中的细节相对少;(2)动漫中的边缘轮廓更突出;(3)动漫的色彩更鲜艳;处理手段(1)突出边缘线条利用canny算子找出边缘,然后利用copyTo函数将边缘加到原图上。这里用到copyTo函数的第二种用法:copyTo(roi , mask)作用是把mask和image重叠以后把mask中像素值为非0(b...原创 2020-05-02 17:04:17 · 4357 阅读 · 1 评论 -
Opencv实战【3】——图像修复与图像锐化(darling in the franxx)
目录原创 2020-05-01 16:57:19 · 1400 阅读 · 2 评论 -
OpenCV实战【2】HOG+SVM实现行人检测
目录HOG是什么?HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数:行人检测HOG+SVM步骤HOG是什么?方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结...原创 2020-04-23 10:28:08 · 2627 阅读 · 0 评论 -
Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)
步骤:1、利用Opencv自带的分类器检测人脸预备知识:Haar特征分类器Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。Haar特征分类器存放地址:(找自己的安装目录)1、D:\opencv\opencv4.0\opencv4.0.0\sources\data\haarcascades2、D:\opencv\opencv4...原创 2020-03-26 21:43:34 · 3785 阅读 · 0 评论 -
Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)
文章目录前言一、完整代码二、实现效果前言代码实现了批量修改统一图片夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径。参考了文章:opencv——批量处理图片并保存但是编译时发现了问题,debug发现是下面一行代码出了问题。savedfilename = dest + filenames[i].substr(55);报错:[[noreturn]] static void _Xlen()经过百度,发现代码中的55意味着path的字符串长度。修改代码为int len .原创 2020-08-21 15:10:12 · 703 阅读 · 1 评论 -
Opencv将处理后的视频保存出现的问题
问题描述:代码运行过程中,imshow出来的每帧的效果图是正确的,但是按照网上的方法保存下来却是0kb,打开不了。程序运行的过程中面板上弹出的错误是:[ INFO:0] VIDEOIO: Enabled backends(5, sorted by priority): FFMPEG(1000); MSMF(990); DSHOW(980); CV_IMAGES(970); CV_MJPEG(...原创 2020-05-06 23:19:24 · 4602 阅读 · 2 评论 -
角点检测(Harris角点检测法)
目录原理讲解【1】为何选取角点作为特征?【2】角点的定义:【3】判断角点的方法:【4】Harris角点检测法示例Opencv自带函数:cornerHarris()函数示例程序1示例程序2原理讲解【1】为何选取角点作为特征?角点是一种局部特征。角落上的可区分性特别强,边缘次之,平滑区域则基本没有区分性。【2】角点的定义:【3】判断角点的方法:这里有个细节:将计算的所有方向上的变化......原创 2020-04-20 17:19:18 · 15153 阅读 · 0 评论 -
如何获取轮廓(连通域)的面积、周长、矩形度、圆形度、宽长比、周径比等形状描述符?
目录前言1、轮廓面积获取函数2、轮廓周长获取函数3、轮廓圆形度计算4、矩形度计算5、宽长比计算6、周径比计算总结:最终示例前言之前学习了连通域和轮廓的知识,其中要框定出自己想要的目标物体,我们往往需要用一些if,else语句用来筛选。这里整理一下常用的筛选条件。先验知识链接:https://blog.csdn.net/qq_42604176/article/details/105588......原创 2020-04-19 14:40:34 · 18710 阅读 · 3 评论 -
Opencv基础画图函数——line、circle、rectangle、Rect、ellipse、polylines、putText函数的用法
目录1、line函数2、circle函数3、rectangle、Rect函数4、ellipse函数5、polylines函数6、随机初始化颜色7、putText函数总结1、line函数line(img,(0,0),(511,511),(255,0,0),5)这个函数有5个参数,img是图像名称,起点坐标,终点坐标,(255,0,0)是蓝色,5是线的宽度会画一条 从左上方到右下角的蓝色线段...原创 2020-04-19 13:37:01 · 3534 阅读 · 0 评论 -
Opencv——findContours函数再探(由轮廓联想连通域)
目录关于调参的一些思考分析图像的一些角度面积、周长、矩形度、圆形度、宽长比例1:找出汽车轮毂圆孔(从轮廓和连通域两个角度)例2:找出芯片中间正方形物体例3:桌面上橘色物体总结关于调参的一些思考合理的参数设置,应该是基于对需要解决的问题的一些已知条件。如需要提取的线段的长度范围,需要定位的工件的尺寸、大小(面积)、形状,周长,矩形度,圆形度等。分析图像的一些角度1.从算法上图像降噪,直方图...原创 2020-04-17 22:53:04 · 4430 阅读 · 6 评论 -
Opencv——查找并绘制凸包、凸包与轮廓的关系
定义给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型。理解物体形状或轮廓的一 种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。检测凸包opencv自带函数:convexHull()参数解释:示例1:检测随机点群的凸包(只有一个凸包)代码以及注释:#include <opencv2/opencv.hpp>...原创 2020-04-09 19:15:37 · 1277 阅读 · 0 评论 -
Opencv——霍夫变换以及遇到的一些问题
问题1 :颜色空间转换函数参数问题:CV_BGR2GRAY vs CV_GRAY2BGROpenCV的颜色空间转换函数:void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )dstCn现在已经改成COLOR_GRAY2BGR之类的以COLOR开头的。CV_BGR2GRAY :将RGB图转换成GRAY图...原创 2020-04-01 23:13:11 · 2266 阅读 · 0 评论 -
Opencv——几何空间变换(仿射变换和投影变换)
放射变化只要用到左边的6个参数。右下角通常设为1.因为我们通常通过T1来对图像进行缩放第三个参数是尺度参数,控制尺度缩放theta角指的是逆时针旋转,改成负值就是顺时针旋转。点共线特性:原本是一条直线,变换后还是一条直线...原创 2020-03-30 23:37:40 · 4320 阅读 · 4 评论 -
Opencv——写入或读取数据到XML或YAML文件
什么是XML、YAML文件XML(eXtensible Markup Language)是一种元标记语言。所谓“原标记”,就是开发者可以根据自身需要定义的标记,任何满足XML命名规则的名称都可以标记。此外,XML是一种语义/结构化语言,它描述了文档的结构和语义。 YAML(YAML Ain’t a Markup Language)也是一种置标语言,但它是以数据为中心,而不是以置标语言为重点,...原创 2020-03-29 21:13:51 · 1400 阅读 · 0 评论 -
Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)
DFT原理:(单变量离散傅里叶变换)数学基础:任何一个函数都可以转换成无数个正弦和余弦函数的和的形式。通常观察傅里叶变换后的频域函数可以获得两个重要的信息:幅频曲线和相频曲线。在数字图像处理中的作用:在数字图像处理中,对一张图片进行傅里叶变换后我们获得的是:实数图像(幅度图像)+虚数图像(相位图像)傅里叶变换在数字图像处理中将空间域信息转为频域信息。如果需要得到图像中的几何结构信息,...原创 2020-03-28 20:36:19 · 2493 阅读 · 0 评论 -
数字图像处理小练习存档1
小练习的题目:1、读取一张图,分解RGB三个通道/************练习1**********************/int main(){ Mat img1 = imread("D:\\opencv_picture_test\\miku2.jpg",2|4); //灰度图 if (img1.empty()) { printf("Could not find the ...原创 2020-03-06 15:20:05 · 270 阅读 · 0 评论 -
Opencv——图像金字塔与图像尺寸缩放
主要讲解1、resize()函数调用函数定义:调用方式:resize(srcImage, dstImage, Size(64, 128)); //对图片进行修改resize(srcImage, dstImage, Size(), 0.5, 0.5);第6个参数的含义:INTER_NEAREST:最邻近插值 (放大好用)INTER_AREA:区域插值(利用像素区域关系的重采样...原创 2020-03-21 16:58:01 · 920 阅读 · 0 评论 -
Opencv实现利用滑动条来调整阈值
#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;#define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏//*--------------------------【练习】利用滑动条来调整阈值----------...原创 2020-03-09 23:50:47 · 1813 阅读 · 1 评论 -
颜色缩减 -利用指针、迭代器、动态地址实现访问像素
为什么要使用颜色缩减在对单通道图像进行处理时,像素的可能值为256个,但处理多通道时,像素的处理就会相当麻烦,其实用这些颜色中具有代表性的一小部分就可以达到同样的效果,所以颜色空间缩减就可以派上用场了。一个信道(channel)有256个不同的值(2^8=256),但是如果使用的是GRB方案,三个channel的话,颜色的数量就会变为256256256,大概是16个million这么多,这么多的...原创 2020-03-01 13:25:45 · 318 阅读 · 0 评论 -
Opencv一维直方图的绘制
下面是我参考《opencv3编程入门》写的绘制一维直方图的代码using namespace cv;using namespace std;#define byte uchar #define TYEPE_GRAY 0#define TYEPE_RGB 1原创 2020-02-29 18:07:29 · 721 阅读 · 0 评论
分享