python 图像旋转怎么去除黑边
答案:1 悬赏:30 手机版
解决时间 2021-02-14 19:54
- 提问者网友:孤山下
- 2021-02-14 02:30
python 图像旋转怎么去除黑边
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-02-14 04:06
去除黑边现象的办法:
1)在做图像坐标映射反查的时候,算出当前点在原始图像的外部还是内部,若在外部,判断当前像素点的X或者Y位置,找临近四个边界的像
素值代替;
该方法太过繁琐,适合自己写程序实现,如若想调用现有的一些库函数,可以考虑2)做法:
2)将待旋转的图像进行边界填充,最不济的情况下可以扩充为原始图像的大小;
旋转边界填充图像;
计算原始图像经过旋转以后的结果图像的尺寸大小;
在边界填充旋转图像上截取目标图像;(图像都是按照图像中心旋转的);
附上一段matlab人脸根据人眼位置对齐的代码:
[plain] view plain copy
eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的倾斜角度
if eye_angle < 0
eye_angle = eye_angle + 360;
end
if floor(eye_angle) <= 5 || floor( 360 - eye_angle ) <= 5
continue;
end % 5度之内不做对齐操作
img = imread(img_path);
[m,n,~] = size(img);
img_pad = padarray(img,[m n],'both','replicate');% 扩充图像
img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋转扩充图像
[m_pad_r,n_pad_r,~] = size(img_pad_rotate);
[plain] view plain copy
eye_angle = eye_angle * pi / 180;
f_cos = cos(eye_angle);f_sin = sin(eye_angle);
new_m = floor(m * abs(f_cos) + n * abs(f_sin));
new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最终对齐图像的大小
left = floor((n_pad_r - new_n) / 2);right = left + new_n;
bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;
face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目标图像
figure,imshow(face_rorate)
1)在做图像坐标映射反查的时候,算出当前点在原始图像的外部还是内部,若在外部,判断当前像素点的X或者Y位置,找临近四个边界的像
素值代替;
该方法太过繁琐,适合自己写程序实现,如若想调用现有的一些库函数,可以考虑2)做法:
2)将待旋转的图像进行边界填充,最不济的情况下可以扩充为原始图像的大小;
旋转边界填充图像;
计算原始图像经过旋转以后的结果图像的尺寸大小;
在边界填充旋转图像上截取目标图像;(图像都是按照图像中心旋转的);
附上一段matlab人脸根据人眼位置对齐的代码:
[plain] view plain copy
eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的倾斜角度
if eye_angle < 0
eye_angle = eye_angle + 360;
end
if floor(eye_angle) <= 5 || floor( 360 - eye_angle ) <= 5
continue;
end % 5度之内不做对齐操作
img = imread(img_path);
[m,n,~] = size(img);
img_pad = padarray(img,[m n],'both','replicate');% 扩充图像
img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋转扩充图像
[m_pad_r,n_pad_r,~] = size(img_pad_rotate);
[plain] view plain copy
eye_angle = eye_angle * pi / 180;
f_cos = cos(eye_angle);f_sin = sin(eye_angle);
new_m = floor(m * abs(f_cos) + n * abs(f_sin));
new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最终对齐图像的大小
left = floor((n_pad_r - new_n) / 2);right = left + new_n;
bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;
face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目标图像
figure,imshow(face_rorate)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯