opencv条码(5)边缘检测

简介: 代码其实可以很简洁 1 #include 2 #include 3 4 using namespace cv; 5 6 int main(){ 7 // Read input image 8 cv::Mat image= cv::imread("C:/testdir/barcode5.

代码其实可以很简洁

 1 #include <cv.h>
 2 #include <highgui.h>
 3 
 4 using namespace cv;
 5 
 6 int main(){
 7     // Read input image
 8     cv::Mat image= cv::imread("C:/testdir/barcode5.jpg", 0);  //0表示按黑白图读入
 9     if(!image.data) return 0;
10     Mat contours;
11     Canny(image, contours, 125, 350);
12     imshow("result", contours);
13     cv::waitKey();
14     return 0;
15 }

 不过为了看起来效果更好一点,可以将黑白对调再显示:

 1 #include <cv.h>
 2 #include <highgui.h>
 3 #include <iostream>
 4 #include <vector>
 5 
 6 using namespace std;
 7 using namespace cv;
 8 
 9 #define PI 3.1415926
10 
11 int main(){
12     Mat image=imread("C:/testdir/barcode0.jpg", 0);
13     Mat contours;
14     Canny(image, contours, 125, 350);       //对于image做边缘检测,结果处理在contours上
15     //--------inverted representation--------//
16     Mat contoursInv;
17     threshold(contours, contoursInv, 128, 255, THRESH_BINARY_INV);//将contours黑白对换,结果处理在contoursInv上
18     //---------------------------------------//
19     imshow("sdfsdf", contoursInv);
20     waitKey(0);
21     return 0;
22 }

 用霍夫变换检测线段

 1 #include <cv.h>
 2 #include <highgui.h>
 3 #include <iostream>
 4 #include <vector>
 5 
 6 using namespace std;
 7 using namespace cv;
 8 
 9 #define PI 3.1415926
10 
11 class LineFinder{
12 private:
13     Mat img;
14     vector<Vec4i>lines;
15     double deltaRho;
16     double deltaTheta;
17     int minVote;
18     double minLength;
19     double maxGap;
20 public:
21     LineFinder():deltaRho(1), deltaTheta(PI/180), minVote(10), minLength(0.), maxGap(0.){}
22 
23     void setAccResolution(double dRho, double dTheta){
24         deltaRho=dRho;
25         deltaTheta=dTheta;
26     }
27     void setMinVote(int minv){
28         minVote=minv;
29     }
30     void setLineLengthAndGap(double length, double gap){
31         minLength=length;
32         maxGap=gap;
33     }
34     vector<Vec4i>findLines(Mat& binary){
35         lines.clear();
36         HoughLinesP(binary, lines, deltaRho, deltaTheta, minVote, minLength, maxGap);
37         return lines;
38     }
39     void drawDetectedLines(Mat &image, Scalar color=Scalar(255, 255, 255)){
40         vector<Vec4i>::const_iterator it2=lines.begin();
41         while(it2!=lines.end()){
42             Point pt1((*it2)[0], (*it2)[1]);
43             Point pt2((*it2)[2], (*it2)[3]);
44             line(image, pt1, pt2, color);
45             ++it2;
46         }
47     }
48 };
49 
50 int main(){
51     Mat image=imread("C:/testdir/barcode0.jpg", 0);
52     Mat contours;
53     Canny(image, contours, 125, 350);       //对于image做边缘检测,结果处理在contours上
54 
55     LineFinder finder;
56     finder.setLineLengthAndGap(100, 20);
57     finder.setMinVote(80);
58 
59     vector<Vec4i>lines=finder.findLines(contours);
60     finder.drawDetectedLines(image);
61     namedWindow("Detected Lines with HoughP");
62     imshow("Detected Lines with HoughP", image);
63 
64 
65   //  imshow("abracadabra", result);
66 
67     waitKey(0);
68     return 0;
69 }

 

目录
相关文章
|
1月前
|
算法 计算机视觉
OpenCV(二十六):边缘检测(二)
OpenCV(二十六):边缘检测(二)
22 0
|
1月前
|
计算机视觉
OpenCV(二十五):边缘检测(一)
OpenCV(二十五):边缘检测(一)
26 0
|
4月前
|
算法 计算机视觉 Python
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
72 0
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
|
1月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
|
3月前
|
监控 算法 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测(C++)
27 1
|
8月前
|
计算机视觉
opencv之 边缘检测(canny)
opencv之 边缘检测(canny)
|
4月前
|
计算机视觉
搭配:基于OpenCV的边缘检测实战
搭配:基于OpenCV的边缘检测实战
|
4月前
|
算法 计算机视觉
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
36 0