One-dimensional code detection
Explanation
One-dimensional code detection (non-recognition) is realized by a simple digital image processing method, which is used to study a large-scale computer vision course homework
Evaluation: Anti-interference ability is too poor
Code
int main()
{
Mat dividedLinearStrength(Mat src);
//1、读图
Mat src = imread("E:/opencv project/homework/week1/data/20.png");
//2、将彩图转化为灰度图
Mat src_gray;
cvtColor(src, src_gray, CV_RGB2GRAY);
//中值滤波
Mat src_zhongzhi;
medianBlur(src_gray, src_zhongzhi, 5);
//3、高斯滤波
Mat src_gaosi;
GaussianBlur(src_zhongzhi, src_gaosi, Size(5, 5), 0);
//线性拉伸:增强二维码对比度,忽略背景对比度明显区域
Mat src_lashen;
src_lashen = dividedLinearStrength(src_gaosi);
//4、形态学梯度运算(scharr)
Mat src_X, src_Y, src_scharr;
Scharr(src_lashen, src_X, CV_32F, 1, 0);
Scharr(src_lashen, src_Y, CV_32F, 0, 1);
subtract(src_X, src_Y, src_scharr);
//转为8位
convertScaleAbs(src_scharr, src_scharr);
//5、模糊化(均值滤波)
Mat src_mean;
blur(src_scharr, src_mean, Size(3, 3));
//6、二值化处理
Mat src_erzhi;
threshold(src_mean, src_erzhi, 180, 255, CV_THRESH_BINARY);
//腐蚀
erode(src_erzhi, src_erzhi, getStructuringElement(MORPH_RECT, Size(5, 5)), Point(-1, -1), 2);
//7、闭运算填充间隙
Mat src_bi;
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));
morphologyEx(src_erzhi, src_bi, MORPH_CLOSE, kernel);
//8、腐蚀膨胀(相同次数)
erode(src_bi, src_bi, getStructuringElement(MORPH_RECT, Size(5, 5)), Point(-1, -1), 4);
dilate(src_bi, src_bi, getStructuringElement(MORPH_RECT, Size(5, 5)), Point(-1, -1), 4);
//9、找边界
vector<vector<Point2i>>contours;
vector<float>contourArea;
//接下来对目标轮廓进行查找
findContours(src_bi, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
//计算轮廓的面积并且存放
for (int i = 0; i < contours.size(); i++)
{
contourArea.push_back(cv::contourArea(contours[i]));
}
double maxValue;
Point maxLoc;
minMaxLoc(contourArea, NULL, &maxValue, NULL, &maxLoc);
//计算面积最大的轮廓的最小的外包矩形
RotatedRect minRect = minAreaRect(contours[maxLoc.x]);
Point2f* vertices = new Point2f[4];
minRect.points(vertices);
for (int j = 0; j < 4; j++)
{
line(src, vertices[j], vertices[(j + 1) % 4], Scalar(0, 255, 255), 3, LINE_AA);
}
imshow(("效果"), src);
waitKey(0);
return 0;
}
explain
In the upload PPT in