MATLAB与Python类似代码进行边缘检测的差异与注意事项

边缘检测

今天在做图像边缘检测的时候遇到了一个比较奇怪的事情,看起来很相似的代码在MATLAB和Python中跑出的结果却不相同。在边缘检测的代码中我定义了一个简单的kernel为[1, -1]用来检测图片的边缘,然后分别和得到的图像进行卷积,最终输出图像。

  • Python代码:
img = cv2.imread("lena.bmp")
my_kernel = [1, -1]
my_kernel = np.reshape(my_kernel, (1, 2))
my_kernel2 = my_kernel.T
res_img = cv2.filter2D(img, -1, np.array(my_kernel))
cv2.imshow('', res_img)
cv2.waitKey(0)
  • Python端得到的图像:

在这里插入图片描述

  • MATLAB代码:
I =  imread( 'lena.bmp' );
my_kernel = [1, -1];
res = conv2(I, my_kernel);
imshow(res);
  • MATLAB端得到的图像:

在这里插入图片描述

当我仔细观看MATLAB里面变量的变量类型才明白了图片差异的原因。

在上面的MATLAB代码中经过了I = imread( 'lena.bmp' )后得到I这个矩阵里面的类型为uint8, 而经过my_kernel = [1, -1]后my_kernel里元素的类型为double,经过conv2之后得到的类型为double.在imshow()里面如果是double类型,则默认范围是(0,1),所以我们能够看到图片中有了这么多的白点。

假如我们将里面的值转为uint8,则会发现MATLAB里面的图片和Python中的一样了。

那么为什么Python中一开始就是那张暗的图呢,因为在Python里创建kernel的时候里面元素默认的是int32类型,所以卷积之后仍然得到的是int32类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值