您的位置:首页 > 编程语言 > C语言/C++

条形码识别项目中C++以及OpenCV基础知识

2017-08-07 10:05 417 查看
1、循环创建文件夹并且在文件夹中写入东西(C++)

      imwrite只能保存到已知的文件夹目录,若文件夹目录不是已知的,在C++中可以添加CreateDirectory(filename, NULL);语句来建立已知的文件夹,其中filename是char类型。循环保存文件夹或者图像时:

sprintf(savefilename, "C:/Users/SLJ/Desktop/TestImage/pic%d/%d.bmp", num, i); 

2、对vector元素进行排序(C++)
      假设定义了一个vector,vector<float> TheTa;用sort可对vector中的数据进行简单排序,std::sort(TheTa.begin(), TheTa.end());

3、在VS中对所有想要替换的文本进行替换:(C++)

        首先找文本control+F,出现如下图所示,下标点击Find In Files。然后点击至Replace in Files,输入要替换的参数。





点击Replace All。

4、在VS中进行include配置时,需要注意的是是否在上一级文件夹中。用#include 加载头文件时,"./"表示当前目录,"../"表示当前目录的上一级目录。在字符串中,'\'是转义字符,要表示'\',在字符串中应写为'\\',因此"../A/B/C.exe"与 "..\\A\\B\\C.exe"等价。

5、如果对于在一个文件夹下,既要包含Include,lib,又要包含项目内容,如下图所示:(C++)



有可能在配置的过程中引发错误。include可以配置为..\..\Include;lib可以配置为..\..\lib;但是之前根据配置OpenCV一劳永逸的方法我们默认Opencv的Include在文件夹C:\OpenCV-3.2.0\opencv\build\include,而默认的lib是在文件夹C:\OpenCV-3.2.0\opencv\build\x86\vc14\lib下。这样会导致配置文件紊乱,编译器不知道去读取哪个配置文件里面的function。解决方法是重新Property
Manager进行重新配置include和lib,将之前的路径删除。

6、条码识别类的封装(C++)

      将小功能的函数放在private中,对外不可见。将这些小功能的函数组合成大功能的函数,外界需要访问,放在public中,参数设置也需要放置在public中,可以通过外界设置。头文件BarDetection.h存放如下图所示:



在BarDetection.cpp中写入函数的实现方式,每个需要实现的小功能都能添加注解:函数名称,函数功能,输入参数,输出参数,注意事项。如下图所示:



7、Canny算子(OpenCV)

        图像边缘检测算法的原理:检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。Canny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size = 3)。

       第一个参数表示输入图像,必须位单通道灰度图像。

       第二个参数表示输出的边缘图像,为单通道黑白图。

       第三个参数和第四个参数表示阈值。如果某一像素位置的幅值超过 高 阈值, 该像素被保留为边缘像素。如果某一像素位置的幅值小于 低 阈值, 该像素被排除。比例最好是1:2或者1:3

       第五个参数表示Sobel 算子大小,默认为3即表示一个3*3的矩阵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐