opencv3+Zbar二维码矫正

形变和畸角变换

// Zbar_code.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
#include
#include
#include

using namespace std;
using namespace cv;
using namespace zbar;

#define GRAY_THRESH 150
#define HOUGH_VOTE 100

int main()
{
	Mat imageSource = imread("dajiang.jpg", 0);
	Mat srcImage = imageSource.clone();

	Point2f center = Point2f(imageSource.cols / 2, imageSource.rows / 2);
	double angle = 10;
	double scale = .5;
	Mat rotateMat;
	rotateMat = getRotationMatrix2D(center, angle, scale);
	warpAffine(imageSource, imageSource, rotateMat, imageSource.size());
	imshow("旋转", imageSource);
	
	Mat image;
	imageSource.copyTo(image);
	GaussianBlur(image, image, Size(3, 3), 0);  //滤波  
	threshold(image, image, 100, 255, CV_THRESH_BINARY);  //二值化  
	imshow("二值化", image);
	Mat element = getStructuringElement(2, Size(9, 9));  //膨胀腐蚀核  
														 //morphologyEx(image,image,MORPH_OPEN,element);   
	for (int i = 0; i<10; i++)
	{
		erode(image, image, element);
		i++;
	}
	imshow("腐蚀s", image);
	Mat image1;
	erode(image, image1, element);
	image1 = image - image1;
	imshow("边界", image1);
	//寻找直线 边界定位也可以用findContours实现  
	vectorlines;
	HoughLines(image1, lines, 1, CV_PI / 150, 250, 0, 0);
	Mat DrawLine = Mat::zeros(image1.size(), CV_8UC1);
	for (int i = 0; icorners;
	goodFeaturesToTrack(DrawLine, corners, 4, 0.1, 10, Mat()); //角点检测  
	for (int i = 0; iget_type_name() << endl << endl;
		cout << "条码:" << endl << symbol->get_data() << endl << endl;
	}
	namedWindow("Source Window", 0);
	imshow("Source Window", srcImage);

	waitKey(0);
	imageZbar.set_data(NULL, 0);

    return 0;
}
opencv3+Zbar二维码矫正_第1张图片

opencv3+Zbar二维码矫正_第2张图片opencv3+Zbar二维码矫正_第3张图片opencv3+Zbar二维码矫正_第4张图片opencv3+Zbar二维码矫正_第5张图片opencv3+Zbar二维码矫正_第6张图片opencv3+Zbar二维码矫正_第7张图片opencv3+Zbar二维码矫正_第8张图片


该方法还需要改进,后期会更新....

你可能感兴趣的:(Bar&amp;QR,Code,opencv,opencv,矫正)