opencv学习笔记
Dawn向阳而生
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于Opencv穿针引线识别晶体管数字
接上一篇文章,开头我就不做详细介绍了,直接先贴代码,然后在最后有一段文字解释代码的思想#include <opencv2/core/core.hpp>#include <opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/imgproc/imgproc.hpp>#in原创 2021-09-07 14:57:07 · 565 阅读 · 0 评论 -
基于opencv的简单数字识别
由于自己学识尚浅,不能用python深度学习来识别这里的数字,所以就完全采用opencv来识别数字,然后在这里分享、记录一下自己在学习过程中的一些所见所得和所想要解决的问题这是一个要识别的数字,我这里首先是对图像进行一个ROI的提取,提取结果就仅仅剩下数字,把其他的一些无关紧要的要素排除在外,这是ROI图片,我们要做的就是识别出该照片中的数字,解决问题的思路1、先把这个图片中的数字分割,分割成为5张小图片,每张图片包含一个数字,为啥要分割呢?因为我们没办法让计算机知道这个数字是多少,所以只能根原创 2021-09-07 14:42:30 · 4884 阅读 · 3 评论 -
opencv-字符分割
这是我从别人那学来的,这里在原有的基础上左了一些修改,然后也添加了一些C++的理解知识#include <opencv2/core/core.hpp>#include <opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/imgproc/imgproc.hpp>#inc原创 2021-08-13 13:46:41 · 1203 阅读 · 0 评论 -
opencv-之轮廓外接圆
我们有时候提取论库的时候是用的霍夫圆检测,但是这种方式查找出来的圆很多,你如果想特定的要某个圆,你需要动手去用面积筛选,这样就限制了代码的鲁棒性,除了用霍夫检测外我们也可以用轮廓外接圆来查找圆;当然这两个方法的前提是你已经对图像做了预处理。下面直接贴上代码了; vector<vector<Point>>contours; vector<Vec4i>hierarchy(contours.size()); findContours(src_open,contours,h原创 2021-05-25 09:27:47 · 1102 阅读 · 1 评论 -
opencv2.4.9的SVM加载训练模型以及图片预测
当你看到这篇文章说明我们有近似的问题在困扰,分享一下学习心得;最近在学习opencv的SVM,我参照网上的教程,训练了数字图片,但是在svm.xml加载模板时总是报错,于是我在网上找了个昏天暗地,但是最后也是没找到,与是我就结合网上的一些说法,自己开始一顿乱操作,最后居然搞成了,很是高兴;我这里把结果给大家粘贴出来;#include <opencv2/opencv.hpp>#include <opencv2/ml/ml.hpp>#include <stdio.h>原创 2021-05-23 09:55:09 · 629 阅读 · 1 评论 -
关于出现_pfirstblock==phead的情况
在我学习Opencv 的过程中我发现有时候在运行程序的时候会出现这个把报错的情况,我在尝试了几次方法之后,发现把vector<Vec4i>放在全局里面这种情况胡消失,并在在使用Qt+vs+opencv时也出现了这种报错的情况,我还是选择把它放在全局里面,问题也会消失,但是具体原因为什么我不知道,...原创 2021-05-17 09:51:07 · 287 阅读 · 0 评论 -
opencv-之特征匹配与目标标记
这篇文章接的是上次两个文章的内容,这个比两面的两个我认为更具体一点。这里是从Opencv英文网站上摘下来的,方便自己学习记录笔记,也希望能为大家的学习带来方便#include <stdio.h>#include <iostream>#include "opencv2/core/core.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/highgui/highgui.hpp"#includ翻译 2021-04-18 21:51:08 · 494 阅读 · 3 评论 -
opencv-之SIFT匹配点对坐标的查找
这一篇是接上篇的文章接着往下写的,这里着重介绍点的输出,其他的地方不做过多的赘述#include "opencv2/opencv.hpp"#include <opencv2/nonfree/nonfree.hpp>//SIFT#include <opencv2/legacy/legacy.hpp>//BFMatch暴力匹配#include <vector>#include<iostream>using namespace std;using na原创 2021-04-16 21:57:21 · 1294 阅读 · 0 评论 -
opencv-之SIFT匹配算法
先上代码#include "opencv2/opencv.hpp"#include <opencv2/nonfree/nonfree.hpp>//SIFT#include <opencv2/legacy/legacy.hpp>//BFMatch暴力匹配#include <vector>#include<iostream>using namespace std;using namespace cv;void main(){ M原创 2021-04-16 21:15:21 · 1037 阅读 · 0 评论 -
opencv-之椭圆拟合出现错误之一
OpenCV Error: Incorrect size of input array (There should be at least 5 points to fit the ellipse) in cv::fitEllipse, file C:\builds\master_PackSlave-win32-vc11-shared\opencv\modules\imgproc\src\shapedescr.cpp, line 379 vector<vector<Point>>co原创 2021-04-09 11:00:21 · 3091 阅读 · 0 评论 -
opencv-之霍夫圆检测参数详解
函数说明:cv.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)image:参数图像8位,单通道,灰度输入图像。method:参数方法检测方法,参数圆输出找到的圆的矢量的方法。上面用的是基于梯度的霍夫圆检测。dp:累加器分辨率与图像分辨率的反比。例如,如果dp=1,累加器的分辨率与输入图像相同。如果dp=2,累加器一半的宽度和高度。minDist:检测圆中心之间的最小距离原创 2021-04-09 09:25:42 · 2760 阅读 · 0 评论 -
opencv-之求直线的斜率
废话不多说,直接上代码vector<Vec4i>R_lines; HoughLinesP(R_dst,R_lines,1,CV_PI/180,50,20,7); /*霍夫直线检测,里面的数字参数依次表示为:50:表示累加平面的阈值参数,即识别某部分为图中的一条直线时它在平面中必须达到的值 ,20:表示最低线段的长度,比这个设定参数短的线段就不能被显示出来。5:表示允许将同一行点与点之间连接起来的最大距离,如果两个点之间的 距离大于这个值,距不能被连接起来 */ float k;//原创 2021-04-06 14:31:48 · 2922 阅读 · 0 评论 -
opencv-之圆形ROI的提取
跟大家分享一下如何提取圆形的ROI有时候我们必须把感兴趣区域分割出来,然后对其进行独自的分析,这样既可以节约代码的运行时间,又可以减少感兴趣区域周围的干扰。常有的方法是用掩膜提取,我这里也是用的掩膜提取findContours(g_adpsrc,contours,hierarchy,RETR_LIST,CHAIN_APPROX_SIMPLE,Point(0,0)); vector<Rect>box(contours.size());//这里先定义一个矩形向量,把你感兴趣的地方用矩形圈起来原创 2021-04-04 21:05:33 · 3344 阅读 · 0 评论 -
opencv-之霍夫直线检测实验心得
这个是我自己在摸索过程中找到的一点心得,如果大家也出现了这样的问题,希望能帮到大家g_can_out.copyTo(s_can);cvtColor(g_can_out,s_gray,COLOR_BGR2GRAY);threshold(s_gray,s_threshold,178,255,THRESH_BINARY);vector<Vec4i>lines;HoughLinesP(s_threshold,lines,1,CV_PI/180,100,50,20);for(size_t i=原创 2021-03-31 16:49:02 · 343 阅读 · 0 评论 -
opencv-之图像细化(直线细化)
平时在我们图像处理的时候会经常用到图像细化或者称为直线细化,在这里我跟大家分享一下我个人的理解,这是我花了一天的时间才搞明白其中的原理,具体的原理大家可以在其他博主的博客里搜索到,偶有详细的解释,我这里只是为大家做一下补充,希望能够帮助大家理解一下就是我对代码的理解,我对每一行的代码进行注解,#include <iostream>#include <vector>#include <opencv2/opencv.hpp>using namespace cv;u原创 2021-03-28 21:02:49 · 2516 阅读 · 3 评论 -
opencv-圆的拟合
在我们平时识别圆时,经常提到霍夫圆检测霍夫直线检测,但是实际上这两个函数检测出来得圆和直线特别得多,需要你自己动手调参数。所以要用直线拟合和椭圆拟合(如果检测出来得圆不太圆或者很多,会拟合成一个),。通过拟合的直线或圆都会成一个,不再乱七八糟的。过程呢还是需要用到发现轮廓这个函数,然后定义一个旋转矩形框vector<RotatedRect>rr(s_contours.size());记住:一定要定义在发现轮廓得下边,不然得话会报错,然后采用一个for循环,循环里面你也可以再用if语句筛选原创 2021-03-21 17:47:42 · 5109 阅读 · 1 评论 -
opencv-裁剪一张图片中的某一个区域ROI
在我们学习图像处理时,很多时候需要在一张图片中找到我们想要的一个区域,但是这个图片又是眼花缭乱的,我们该怎么做呢?我在这里总结一下我在处理时的一个过程,前边的很多工作都是很简单的,比如:首先转为灰度图,然后二值化处理,接下来就是边缘检测,这里最好创建一个滑动调,可以找到最好的边缘,然后就是发现轮廓,到这里也就是到了最关键的地方,我在这里是采用的面积过滤的方法,也就是在发现轮廓后创建了一个for循环,在for循环里面采用一个面积函数contoursArea来计算每个轮廓的面积,就是这个样子的,记住,定义一原创 2021-03-21 17:30:04 · 1619 阅读 · 0 评论 -
在opencv使用发现轮廓函数时出现-vector subscript out of range的问题
大家在使用findContours时,有时会出现vector subscript out of range 这样的问题,我一开始很无厘头,到处查找自己的代码,我i感觉时我的点集数contours太多超过了容器的范围吗?我就cout输出我的点集数,发现没有,判断之后就剩1个点集数了,这不该啊,我在网上查了相关的资料才发现,原来是我在定义容器与变量的时候出现了问题,我的目的本来是想定义一个旋转矩形的容器与该容器的变量`vectorrr(s_contours.size());但是,我把这个容器及变量定义在了全局原创 2021-03-21 16:30:50 · 698 阅读 · 1 评论 -
Opencv-minAreaRect函数以及boundingRect函数的理解
RotatedRect minRect=minAreaRect(contours[i])这个函数是获取轮廓中,最小矩形的函数,里面的参数非常简单,只有一个,那就是发现轮廓的集合,这个函数会返回来值,那就是从轮廓集中找到的最小轮廓,在接收这个返回值之前,必须用RotatedRect关键字来定义一个变量minRect接收,而这个变量中储存的是一个矩形,这个矩形有很多属性,正常矩形的所有特征属性比如:角度、边界、中心、点、和大小,而大小又可以分为长和宽,而该矩形的点也可以读取和输出,当选择输出的时候一般是用在要原创 2021-03-19 22:05:08 · 2724 阅读 · 1 评论 -
opencv-霍夫变换
霍夫变换添加链接描述转载 2021-02-02 13:34:40 · 98 阅读 · 0 评论 -
opencv -掩膜操作
矩阵的掩膜操作(也可以成为锐化)首先介绍一下什么是掩膜:用选定的对象去覆盖修饰另一个目标对象,使其达到想要的效果。掩膜操作有两种方法,一种是使用函数filter2D,另一种是遍历数组进行修改。下边分别记忆这两种方法(在这里我省去了一些常规操作,直接开始写关键代码)int main(){Mat src;src=imread("图片位置");if(!src.data){ prinft("could not the picture"); return -1;}Mat dst;ds原创 2021-01-20 22:18:04 · 464 阅读 · 0 评论 -
opencv——图像模糊
opencv——图像模糊图像模糊(所谓模糊,可以理解成每一个像素都取周边像素的平均值)是在给图像做预处理时,降低图像噪声,例如:在大目标支取之前,去除图像的一些琐碎细节。这里的噪声与物理学中的噪声不大相同。应该找时间去查找资料理解一下。#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(){Mat src;src=imread("原创 2021-01-19 22:09:37 · 453 阅读 · 0 评论 -
opencv像素取反函数
opencv像素取反函数#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;int main(){//像素取反的方法有两种,一种是借助bitwise_not()函数,一种是手动取反。不过中心思想是利用255-当前像素值=取反值,即白变成黑Mat src;src=imread("图片存储位置");if(!src.data){printf("com原创 2021-01-19 21:52:25 · 668 阅读 · 0 评论 -
opencv-声明一个窗口
Mat变量操作#include<iostream>#include<opencv2/opencv.hpp>using namespace cv;using namespace std;int main(){Mat src;src=imread("你的图片地址");//这是要读取你的图片namedWindow("给窗口起一个名字",WINDOW_AUTOSIZE);//后边的这是图片大小自适应imshow("刚才起的名字",src)//这是显示图片的指令Mat d原创 2021-01-19 21:22:31 · 210 阅读 · 0 评论
分享