利用hough变换将二维码转正,matlab代码
时间: 2023-06-17 20:08:12 浏览: 53
以下是利用Hough变换将二维码转正的MATLAB代码:
```matlab
% 读入图像
img = imread('二维码图片.jpg');
% 转为灰度图像
gray = rgb2gray(img);
% 边缘检测
edgeImg = edge(gray, 'canny');
% 进行Hough变换
[H,theta,rho] = hough(edgeImg);
% 寻找直线
P = houghpeaks(H,2,'threshold',ceil(0.3*max(H(:))));
% 画出直线
lines = houghlines(edgeImg,theta,rho,P,'FillGap',50,'MinLength',5);
% 寻找最长的直线
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
len = norm(lines(k).point1 - lines(k).point2);
if ( len > max_len)
max_len = len;
xy_long = xy;
end
end
% 旋转图像
angle = atan2(xy_long(2,2) - xy_long(1,2), xy_long(2,1) - xy_long(1,1)) * 180/pi;
rotatedImg = imrotate(img, angle, 'crop');
% 显示结果
subplot(1,2,1), imshow(img), title('原始图像');
subplot(1,2,2), imshow(rotatedImg), title('旋转后的图像');
```
其中,`imread`函数用于读入图像,`rgb2gray`函数用于将图像转为灰度图像,`edge`函数用于进行边缘检测,`hough`函数用于进行Hough变换,`houghpeaks`函数用于寻找直线,`houghlines`函数用于画出直线,`imrotate`函数用于旋转图像。最后,利用`subplot`函数将原始图像和旋转后的图像显示在同一张图中。