- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用https://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm中所述的稀疏/命中或遗漏方法来实现骨架化算法。
我想提取以下图像的骨架,我认为这是测试的好图像:
https://github.com/TiagoB936/Image-Processing-and-Computer-Vision/blob/master/Skeletonization/x.png
问题是我的代码无法停止运行,而且我没有发现问题。
我的代码执行以下步骤:
import cv2 as cv
import numpy as np
input_image = cv.imread('x.png',0)
_,input_image = cv.threshold(input_image,60,255,cv.THRESH_BINARY)
kernel1 = np.array((
[0, 0, 0],
[-1, 1, -1],
[1, 1, 1]), dtype="int")
kernel2 = np.array((
[-1, 0, 0],
[1, 1, 0],
[-1, 1, -1]), dtype="int")
kernel3 = np.rot90(kernel1)
kernel4 = np.rot90(np.rot90(kernel1))
kernel5 = np.rot90(np.rot90(np.rot90(kernel1)))
kernel6 = np.rot90(kernel2)
kernel7 = np.rot90(np.rot90(kernel2))
kernel8 = np.rot90(np.rot90(np.rot90(kernel2)))
output_image_1 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel1)
output_image_2 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel2)
output_image_3 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel3)
output_image_4 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel4)
output_image_5 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel5)
output_image_6 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel6)
output_image_7 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel7)
output_image_8 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel8)
hit_miss = output_image_1 + output_image_2 + output_image_3 + output_image_4 + output_image_5 + output_image_6 + output_image_7 + output_image_8
output_image = input_image - hit_miss
while not np.array_equal(output_image, input_image):
input_image = output_image
output_image_1 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel1)
output_image_2 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel2)
output_image_3 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel3)
output_image_4 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel4)
output_image_5 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel5)
output_image_6 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel6)
output_image_7 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel7)
output_image_8 = cv.morphologyEx(input_image, cv.MORPH_HITMISS, kernel8)
hit_miss = output_image_1 + output_image_2 + output_image_3 + output_image_4 + output_image_5 + output_image_6 + output_image_7 + output_image_8
output_image = input_image - hit_miss
cv.imshow("hit_miss", hit_miss)
cv.imshow("out", output_image)
cv.waitKey(0)
cv.destroyAllWindows()
最佳答案
您想使用逻辑或在应用所有内核之后而不只是添加它们。
import cv2 as cv
import numpy as np
img = cv.imread('x.png',0)
_,img = cv.threshold(img,60,255,cv.THRESH_BINARY)
cv.imshow("input", img)
cv.waitKey(0)
cv.destroyAllWindows()
kernel1 = np.array((
[[-1, -1, -1],
[0, 1, 0],
[1, 1, 1]]))
kernel2 = np.array((
[[0, -1, -1],
[1, 1, -1],
[0, 1, 0]]))
kernel3 = np.rot90(kernel1)
kernel4 = np.rot90(kernel2)
kernel5 = np.rot90(np.rot90(kernel1))
kernel6 = np.rot90(np.rot90(kernel2))
kernel7 = np.rot90(np.rot90(np.rot90(kernel1)))
kernel8 = np.rot90(np.rot90(np.rot90(kernel2)))
skel = np.zeros(img.shape,np.uint8)
mask = np.zeros(img.shape,np.uint8)
kernels = [kernel1, kernel2, kernel3, kernel4, kernel5, kernel6, kernel7, kernel8]
while (1):
mask = np.zeros(img.shape,np.uint8)
for kernel in kernels:
out_image = cv.morphologyEx(img, cv.MORPH_HITMISS, kernel)
mask = cv.bitwise_or(out_image, mask)
img = img - mask
if (np.array_equal(img, skel)):
break
skel = img
cv.imshow("out", img)
cv.waitKey(0)
cv.destroyAllWindows()
关于python - 使用细化和命中或遗失实现的骨架化永不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790429/
我正在尝试缩小此图像,但它会不断失真。 这是我应用细化的相关代码。我也尝试过使用“thin”功能而不是“skeletonize”,但结果相似。 from skimage.morphology impo
好的,据我所知,目前我们有两种方法 首先是我可以在给定脚本中使用的一些 javascript。但这会关闭所有内容的右键单击。 window.oncontextmenu = function() {
在 MarkLogic 中如何找到元素所在的文档 URI 匹配的值为1742 这里是示例 XML 文档: 1742 1742 TT 1742
摘要:我有一个数据集,其收集方式使得维度最初不可用。我想获取本质上是一大块无差别的数据,并为其添加维度,以便可以对其进行查询、子集化等。这是以下问题的核心。 这是我拥有的 xarray 数据集: D
我有一个大型数据集(请参阅下面的示例格式),我需要进行以下思考: 确定第 1、2、5 列中出现的重复值 - 如果全部重复,那么我需要删除多余的行并对第 8 列中的值进行平均(这对于我将发布的代码是成功
我正在做一个练习项目,其中 iOS 应用程序打印来自 jsonplaceholder.typicode.com 的/posts 列表,当用户选择一个时,加载详细 View Controller 并显示
module Access def last self[-1] end def start_end self[0] + last end end module Stri
我是一名优秀的程序员,十分优秀!