【问题标题】:OpenCV Opening/Closing shifts the positions of the pixelsOpenCV 打开/关闭移动像素的位置
【发布时间】:2015-08-23 22:12:01
【问题描述】:

我目前正在使用 OpenCV 2.4 对二进制图像进行形态转换

我刚刚注意到,使用 OpenCV 的内置函数,我所有像素的位置都向右和向下移动了一个(即先前位于 (i,j) 的像素现在位于 (i+1, j +1))

import cv2
import numpy as np
from skimage.morphology import opening

image = cv2.imread('input.png', 0)
kernel = np.ones((16,16), np.uint8)

opening_opencv = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

opening_skimage = opening(image, kernel)

cv2.imwrite('opening_opencv.png', opening_opencv)
cv2.imwrite('opening_skimage.png', opening_skimage)

输入:

输出:

由于我不明白为什么,我只是使用 skimage 绑定了相同的操作,并且在形态转换过程中并没有产生这个“间隙”。

输出:

关于这个问题的任何想法?

谢谢!

【问题讨论】:

  • 好吧,我可能有一个答案......如果我的结构元素大小不均匀(即 15x15),它的中心实际上没有整数坐标。 OpenCV 可能会选择 (7,7),结果,开放变换会导致偏移……但这里是 16x16……所以中心始终是 (8,8)..!

标签: python opencv mathematical-morphology


【解决方案1】:

这是你评论的方式,但完全相反:)

均匀大小的结构元素会导致移位,没有中间像素。对于奇数大小,您会得到一个中间像素和每个大小的 (n-1)/2 个像素。

另一种说法是,奇数大小的 SE 是对称的,偶数大小是不对称的。

【讨论】:

  • 没错,我错了。然而,OpenCV 可以解决这个问题,因为 scikit-image 能够做到:)
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多