# find_QR **Repository Path**: NO_WARNING/find_QR ## Basic Information - **Project Name**: find_QR - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2018-12-10 - **Last Updated**: 2020-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # find_QR #### QR_Photo.cpp 输入照片定位二维码 #### QR_Video.cpp 开启摄像头定位二维码 ##### 1.cvtColor()函数 作用:将一个图像从一个颜色空间转换到另一个颜色空间 ``` void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 ); // InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类 // OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类 // int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片,例如CV_BGR2GRAY转为灰度 // int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定 ``` ``` cvtColor( src, src_gray, CV_BGR2GRAY ); ``` ##### 2.findContours()函数 ``` findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point()); ``` ###### 2.1第二个参数contours 定义为:vector< vector > contours, 是一个双重向量, 向量内每个元素保存了一组连续的Point点构成的点的集合的向量, 每一组Point点就是一个轮廓,有多少轮廓contours就有多少元素。 ###### 2.2Vec4i 定义:typeof Vec Vec4i; Vec4i 是Vec 的别名,定义了一个“向量内每一个元素包含了4个int型变量”的向量 ###### 2.3第三个参数hierarchy 定义为:vector< Vec4i> hierarchy(层次), 结合 Vec4i 理解出hierarchy也是一个向量,向量内每个元素保存了一个包含4个int整型的数组 向量hierarchy内的元素和轮廓向量contours内的元素是一一对应的,向量的容量相同 ``` hierarchy向量内的每一个元素的4个int型变量: hierarchy[i][0]:i个轮廓的后一个轮廓 hierarchy[i][1]:i个轮廓的前一个轮廓 hierarchy[i][2]:i个轮廓的父轮廓 hierarchy[i][3]:i个轮廓的内嵌轮廓 如果当前轮廓没有对应的...,hierarchy[i][0]~hierarchy[i][3]被设置为默认值-1。 ``` ###### 2.4 第四个参数mode 定义轮廓的检索模式: ``` 1. CV_RETR_EXTERNAL // 只检索最外围轮廓,包含在外围轮廓内的内围轮廓被忽略 2. CV_RETR_LIST // 检索所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此独立 所以hierarchy向量内所有元素的第3、4个分量都会被设置为-1 3. CV_RETR_CCOMP // 检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓 还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层 4. CV_RETR_TREE // 检测所有轮廓,所有轮廓建立一个等级树结构。 ``` ###### 2.5第五个参数method 定义轮廓的近似方法: ``` 1. CV_CHAIN_APPROX_NONE // 保存物体边界上所有连续的轮廓点到contours向量内 2. CV_CHAIN_APPROX_SIMPLE // 仅保存轮廓的拐点信息 3. CV_CHAIN_APPROX_TC89_L1 和 CV_CHAIN_APPROX_TC89_KCOS // 使用teh-Chinl chain近似算法 ``` ###### 2.6第六个参数Point偏移量 所有轮廓信息相对于原始图像对应点的偏移量,相对于每一个检测出的轮廓点上加上该偏移量,Point还可以是负值 ###### 2.7example ``` #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/imgproc.hpp" #include "iostream" using namespace std; using namespace cv; int main(int argc,char *argv[]) { Mat imageSource=imread(argv[1],0); imshow("Source Image",imageSource); Mat image; GaussianBlur(imageSource,image,Size(3,3),0); Canny(image,image,100,250); vector> contours; vector hierarchy; findContours(image,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point()); Mat imageContours=Mat::zeros(image.size(),CV_8UC1); Mat Contours=Mat::zeros(image.size(),CV_8UC1); //绘制 for(int i=0;i(P)=255; } //输出hierarchy向量内容 char ch[256]; sprintf(ch,"%d",i); string str=ch; cout<<"向量hierarchy的第" <