在对灰度图、二值图测试显示过程中,发现matlab的imshow函数和plt.imshow函数显示的图像会出现信息缺失情况,让人误以为图像矩阵像素值发生变化。经过测试,是由于imshow函数存在像素缩放导致。可通过缩放原图,或者放大结果图像进行完整信息显示。
function Testimshow()
img = imread('demoshape.png');
if(numel(size(img)) > 2)
img = rgb2gray(img);
end
% img = imresize(img,[300,400]); % 缩小图像
px = img(2:end,:) - img(1:end-1,:); % 数据类型均为uint8, 负数强制为0. python中负数强制为其补数
qy = img(:,2:end) - img(:,1:end-1);
figure
subplot(131)
imshow(img)
title('img')
subplot(132)
imshow(px)
title('px')
subplot(133)
imshow(qy)
title('qy')
end
因为图片过大,导致有些信息无法显示,通过缩小原图,或者直接对结果进行放大可以看到另一条边缘:
def TestCV_plt():
img = cv2.imread('./imgs/others/img/demoshape.png',0)
H,W = img.shape
# img = cv2.imresize(img,[400,300]) # [列数,行数]
imglight = img[1:H, :]
imgdark = img[0:H - 1, :]
px = CalcImgDiff(imglight,imgdark,0)
imglight = img[:,1:W]
imgdark = img[:,0:W-1]
qy = CalcImgDiff(imglight, imgdark,0)
cv2.imshow('px',px)
cv2.imshow('qy',qy)
cv2.waitKey(0)
plt.figure()
# plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.05, hspace=0.05)
# plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.1, hspace=0.05)
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.05, hspace=0.1)
plt.subplot(221)
plt.imshow(px,'gray')
plt.subplot(222)
plt.imshow(qy, 'gray')
plt.subplot(223)
plt.imshow(px, 'gray',vmin=0,vmax=255)
plt.subplot(224)
plt.imshow(qy, 'gray',vmin=0,vmax=255)
plt.show()
plt.imshow会自动对灰度图进行图像增强处理, 可以通过vmin和vmax调节线性灰度变换效果.
类似matlab中操作,通过缩小原图,或者改变子图间距来调整显示结果。