- 博客(24)
- 收藏
- 关注
原创 寻找轮廓--OpenCV14
一般一个轮廓都对应一系列的点,也就是图像中的一条曲线。其表示方法可能根据不同的情况有所不同。可以利用 findContours()函数从二值图像中查找轮廓。CV_EXPORTS_W void findContours( InputArray image, OutputArrayOfArrays contours, Outp...
2020-05-04 21:53:30
453
原创 图像重映射--OpenCv13
重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。就是按照一个对应法则去转化g(x,y)=f( h(x,y) ) ,其中,g()是目标图像,f()是源图像,而h(x,y)是作用于(x,y)的映射方法函数。若有一幅图像I,对其按照h(x,y) = (I.cols-x,y); 那么就会按照X轴旋转CV_EXPORTS_W void remap( InputA...
2020-05-03 18:23:35
238
原创 霍夫变换(线检测,圆检测)--OpenCV12
原理先留着,日后补上。针对线检测,一般使用累计概率霍夫变换:HoughLineP()函数 检测速度更快。CV_EXPORTS_W void HoughLinesP( InputArray image, OutputArray lines, double rho, double theta, int thresho...
2020-04-24 12:23:50
287
原创 边缘检测--OpenCV11
边缘检测的各种算子和滤波器有 Canny算子,Sobel算子,Laplacian算子以及scharr滤波器。最优边缘检测的三个主要评价标准低错误率:标识出尽可能多的实际边缘,同时尽可能地减少噪声产生的误报。高定位性:标识出的边缘要与图像中的实际边缘尽可能接近。最小响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘1.Canny算子Canny的目标就...
2020-04-18 12:08:50
302
原创 阈值化(二值化)--OpenCV10
阈值化可以被视为最简单的图像分割方法。比如,从一幅图像中利用阈值分割出我们所需要的物体部分。这样的图像分割方法基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。Threshold()和adaptiveThreshold()函数可以这样的操作。他们的思路为:给定一个阈值和图像数组,然后根据数组中的每个元素的值是高于还是低于阈值而进行处理。固定阈值函数Thresho...
2020-04-16 17:29:07
1182
原创 图像金字塔--OpenCV09
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割。 是一种以多分辨率来解释图像的有效但概念简单的结构。 图像金字塔的底部是待处理图像的高分辨率表示,顶部是低分辨率的近似 我们将一层一层的图像比喻成金字塔,层次越高,则图像越小,分辨率越低。 一般情况下有两种类型的图像金字塔常常出现在文献以及实际运用中。 高斯金字塔(Gaussianpyra...
2020-04-16 16:00:29
130
原创 形态学运用(去除图像噪点,提取水平线,垂直线)--OPenCV08
转化为二值化图像--adaptiveThresholdMat Src //输入的灰度图像Mat dst //二值图像
2020-04-16 12:28:39
4143
原创 形态学基本操作--OpenCV07
数学形态学是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀 灰值开闭运算、灰值形态学梯度最基本的形态学操作为 膨胀(dilate)和腐蚀(erode)膨胀就是求局部最大值的操作,会使图像中的高亮区域逐渐增长(变得更白)腐蚀就是求局部最小值的操作,图像...
2020-04-14 22:38:36
393
原创 滑动条的创建和使用--OpenCV06
滑动条需要一个回调函数 ,好处就是可以更改一些参数的值 直接看到状态变化,以图像叠加为例Mat Img1;Mat Img2;Mat OutImg;int alpha=0;void WeightTrackbar(int, void*); //响应滑动条的回调函数int main(){ Img1 = imread("demo.jpg"); if (!Img1.data)...
2020-04-14 18:02:05
133
原创 图像模糊处理 滤波算法--OpenCV05
平滑处理也称模糊处理 是一种简单且使用频率很高的图像处理办法 平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真 在涉及到降低图像分辨率的时候,平滑处理是非常好用的办法 使用平滑处理是为了给图像预处理时降低噪声 有以下几种滤波算法 均值滤波(邻域平均滤波)--Blur函数 高斯滤波 --Gaus...
2020-04-14 15:12:53
1171
原创 使用随机函数进行描绘线条--OpenCV004
生成随机数 cv::RNG 生成高斯随机数gaussian(double sigma) 生成正态分布随机数uniform(int a,int b); 在a-b之间生成随机数void DrawRandomLine(Mat& Img){ //生成随机数 cv::RNG //生成高斯随机数gaussian(double sigma) //生...
2020-04-12 22:21:24
227
原创 图像混合,对比度亮度调节,绘制线条,矩形,圆,椭圆--OpenCV03
图像混合,其实就是两张图像依照一定的比例进行叠加 公式如下alpha为0-1的数字 代表了图像的占比void MixImg(Mat& img1, Mat& img2, Mat& outimg){ //开始进行图像的混合 double alpha = 0.5; addWeighted(img1, alpha, img2, 1 -...
2020-04-12 22:13:03
182
原创 Mat类型元素的读取--OpenCV02
多通道的Mat类矩阵是一个类似于三维的数据,而计算机的存储空间是一个二维空间,因此Mat类矩阵在计算机存储时是将三维数据变成二维数据,先存储第一个元素每个通道的数据,之后再存储第二个元素每个通道的数据。每一行的元素都按照这种方式进行存储,因此如果我们找到了每个元素的起始位置,便可以找到这个元素中每个通道的数据Mat类常用的属性 Mat a = Mat(3, 4, CV_...
2020-04-11 20:09:47
901
原创 Mat类型的创建及运算--OpenCV01
Mat类型的构造方式有二十多种,仅学习了常用的构造方式。1)利用im.read函数读入图像 Mat Img1 = imread("C:/Users/Desktop/lena.jpg");//读入图像 路径用/递进 namedWindow("Input img",WINDOW_AUTOSIZE); //创建一个窗口1 imshow("Input img", Img1)...
2020-04-11 16:19:15
565
原创 c++--list容器 链表操作
链表相当于 不连续的数组 每个元素都有自己的位置 并包含有指向下一个元素的位置,这样相当于形成了链式链表不支持遍历 //list容器构造 链表 list <int> L1; L1.push_back(10); L1.push_back(20); L1.push_back(30); L1.push_back(40); L1.push_back(50); pri...
2020-04-09 11:50:05
470
原创 C++--stack容器与queue容器
这俩容器较为简单,都不可遍历容器。stack只能访问栈顶元素。 stack--栈queue只能访问队列中首尾元素。 queue--队列void test01(){ stack <int> s; //入栈 s.push(10); s.push(20); s.push(30); s.push(40); s.push(50); while (s.em...
2020-04-08 17:40:47
158
原创 STL案例 --评委打分
有五个学生ABCDE--每个学生有10个评委打分 去掉最高最低求他们的平均分数class Person{public: Person(string name, int score) { this->m_Name = name; this->m_Score = score; } string m_Name; //姓名 int m_Score; //平...
2020-04-08 16:57:05
371
4
原创 c++---deque容器
deque容器为双端数组,与vector类似,但vector仅为后端 deque可以前端插入数据删除数据。void printdeque(deque<int>& d){ for (deque<int>::iterator it = d.begin();it != d.end();it++) { cout << (*it) <<...
2020-04-08 15:30:46
172
原创 c++--vector容器(动态扩展数组)
//默认无参构造 vector<int> v1; for (int i = 0;i < 10;i++) v1.push_back(i); printVector(v1); //区间拷贝构造 vector<int> v2(v1.begin(), v1.end()); printVector(v2); //n个element方式构造 vec...
2020-04-07 19:52:17
1011
原创 C++--String容器
string str1 = "abcdefg"; rfind 是从右往左查早 find 是从左往右查找 cout << str1.find("e") << endl; cout << str1.rfind("ef") << endl; //字符串替换// str1.replace(1, 3, "1111"); cout <...
2020-04-07 12:14:26
124
原创 初学opencv03--颜色空间
import cv2 as cvimport numpy as npfilename = 'C:/Users/45450/Desktop/lenna.jpg'img = cv.imread(filename)gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imshow('source image', img)cv.imshow('gray...
2020-02-01 16:27:41
153
原创 初学opencv02--摄像头定时截图
import cv2import numpy as npprint('------hello cv')cap = cv2.VideoCapture(0)index = 0imgname = 0while True: index = index +1 reg, img = cap.read() cv2.imshow('Camera', img) if...
2020-01-29 22:06:09
1147
原创 初学opencv01--开启摄像头
import cv2import numpy as npprint('------hello cv')cap = cv2.VideoCapture(0)# 开启摄像头 0代表是笔记本自带摄像头# 有多的摄像头接口的话 次序上升即可 0-1-2while True: if cap.isOpened(): ret, frame = cap.read() ...
2020-01-29 21:50:39
208
原创 搭建物联网服务器基于nodejs
偶然的机遇,今天接触了服务器。刚开始不知道服务器为何物,今天算是了解了个大概。搭建的TCP服务器算一个载体,可以把一些硬件获取到的数据全部接入网络,然后通过一个接口发给手机或者上位机。通过特定的IP地址。我的手机想要操控一盏灯。可以通过服务器。将硬件端连入搭建好的服务器,然后软件端也连入对应的服务器。当服务器接收到手机发过去的指令后,处理一下再把数据发送给硬件端,硬件段接收到指令 ,实现...
2018-12-26 21:49:43
3215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人