在底部图像中找到最大黑色像素数的最小平面。找到顶部图像的黑色像素的峰值
Find the minimum plane of the maximum number of black pixels in the bottom image. Find the peak of the black pixels for the top image
这是实际图片
我想找出二值图像中 2 个不规则边缘之间的距离。那就是我在下图中用红色标记了。我的想法是在两个边缘上画一条彩色线(比如红色),然后以 10 个相等的间隔计算它们之间的距离(黄色标记)
我将图片裁剪成两部分。假设上半部分是
下半部分是
我想画两条红线,或者只是想知道这两条线之间的距离。我一直在使用 OpenCV 和 PILLOW 进行了很多步骤。
还有一些图像实例,其中在几列顶部图像中没有黑色像素。我如何计算黑色像素与顶部的距离?只是最上面的图片。
这是一种可能的方法。我会把细节留给你。但想法是使用 Numpy argmax(或适当的 argmin)来获取每列中所有黑色之后第一个白色的索引。首先,我垂直翻转图像,使黑色位于顶部。 Numpy argmax,似乎找到了沿列的第一个白色值。
输入(下图):
import numpy as np
import cv2
# read image
img = cv2.imread("img.png")
# Note that there is a 2 pixel tall white line at the bottom
# Note that there is columns of black at the left and right sides
# convert to grayscale
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# threshold
img = cv2.threshold(img,0,255,cv2.THRESH_BINARY)[1]
# flip vertically
img = cv2.flip(img, 0)
# remove 2 pixels at the top
img = img[2:, :]
# add one pixel row of white at bottom
img = cv2.copyMakeBorder(img, 0, 2, 0, 0, cv2.BORDER_CONSTANT, value=255)
# find max along each column
max = np.argmax(img, axis=0)
print(max.shape)
print(max)
cv2.imshow('flipped',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这是输出:
(709,)
[112 112 112 112 32 32 32 32 32 32 32 32 32 32 32 32 32 32
31 31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 30 30 30
30 30 30 31 31 32 32 33 33 34 35 35 36 36 36 36 36 36
36 36 36 36 36 36 36 36 37 37 38 38 39 39 39 40 40 40
41 41 43 43 44 45 45 46 46 46 46 46 46 46 46 46 46 46
46 46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 45 44
44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43
43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 43 43 43
42 42 42 42 42 42 42 42 42 42 41 41 40 40 40 40 40 40
40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39
39 39 39 39 39 39 39 39 39 39 39 39 38 38 37 37 37 37
37 37 37 36 36 36 36 36 35 35 35 34 34 34 34 34 34 34
34 34 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32
33 33 34 34 35 35 36 37 37 37 37 38 38 38 38 38 38 38
38 38 38 38 38 38 38 39 39 40 40 40 40 40 39 39 39 39
39 39 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37
37 38 38 38 39 40 40 41 41 41 39 39 38 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 38 38
38 39 39 39 39 39 39 39 39 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
40 40 40 40 40 40 40 40 40 40 39 39 38 38 37 37 37 37
36 36 36 36 36 36 35 35 34 34 34 33 33 33 32 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 30 30 29 29 29 28 28 28 28 27
27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 27 27
27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 28 28 28
28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 29
29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
29 28 28 27 27 27 27 27 27 27 27 27 27 27 27 27 28 28
28 28 29 29 30 30 30 31 31 32 32 33 33 34 34 35 35 36
36 36 37 37 37 38 38 39 39 39 39 39 39 39 39 39 39 39
39 38 38 37 37 37 37 37 37 36 36 35 35 35 35 35 35 35
35 35 35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 36
36 36 36 36 36 36 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 38 38 38 39 39
39 39 39 40 112 112 112]
对于顶部使用 argmin 或使用 img=255-img
反转极性,然后使用 argmax。
这是实际图片
我想找出二值图像中 2 个不规则边缘之间的距离。那就是我在下图中用红色标记了。我的想法是在两个边缘上画一条彩色线(比如红色),然后以 10 个相等的间隔计算它们之间的距离(黄色标记)
我将图片裁剪成两部分。假设上半部分是
下半部分是
我想画两条红线,或者只是想知道这两条线之间的距离。我一直在使用 OpenCV 和 PILLOW 进行了很多步骤。
还有一些图像实例,其中在几列顶部图像中没有黑色像素。我如何计算黑色像素与顶部的距离?只是最上面的图片。
这是一种可能的方法。我会把细节留给你。但想法是使用 Numpy argmax(或适当的 argmin)来获取每列中所有黑色之后第一个白色的索引。首先,我垂直翻转图像,使黑色位于顶部。 Numpy argmax,似乎找到了沿列的第一个白色值。
输入(下图):
import numpy as np
import cv2
# read image
img = cv2.imread("img.png")
# Note that there is a 2 pixel tall white line at the bottom
# Note that there is columns of black at the left and right sides
# convert to grayscale
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# threshold
img = cv2.threshold(img,0,255,cv2.THRESH_BINARY)[1]
# flip vertically
img = cv2.flip(img, 0)
# remove 2 pixels at the top
img = img[2:, :]
# add one pixel row of white at bottom
img = cv2.copyMakeBorder(img, 0, 2, 0, 0, cv2.BORDER_CONSTANT, value=255)
# find max along each column
max = np.argmax(img, axis=0)
print(max.shape)
print(max)
cv2.imshow('flipped',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这是输出:
(709,)
[112 112 112 112 32 32 32 32 32 32 32 32 32 32 32 32 32 32
31 31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 30 30 30
30 30 30 31 31 32 32 33 33 34 35 35 36 36 36 36 36 36
36 36 36 36 36 36 36 36 37 37 38 38 39 39 39 40 40 40
41 41 43 43 44 45 45 46 46 46 46 46 46 46 46 46 46 46
46 46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 45 44
44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43
43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 43 43 43
42 42 42 42 42 42 42 42 42 42 41 41 40 40 40 40 40 40
40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39
39 39 39 39 39 39 39 39 39 39 39 39 38 38 37 37 37 37
37 37 37 36 36 36 36 36 35 35 35 34 34 34 34 34 34 34
34 34 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32
33 33 34 34 35 35 36 37 37 37 37 38 38 38 38 38 38 38
38 38 38 38 38 38 38 39 39 40 40 40 40 40 39 39 39 39
39 39 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37
37 38 38 38 39 40 40 41 41 41 39 39 38 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 38 38
38 39 39 39 39 39 39 39 39 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
40 40 40 40 40 40 40 40 40 40 39 39 38 38 37 37 37 37
36 36 36 36 36 36 35 35 34 34 34 33 33 33 32 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 30 30 29 29 29 28 28 28 28 27
27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 27 27
27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 28 28 28
28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 29
29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
29 28 28 27 27 27 27 27 27 27 27 27 27 27 27 27 28 28
28 28 29 29 30 30 30 31 31 32 32 33 33 34 34 35 35 36
36 36 37 37 37 38 38 39 39 39 39 39 39 39 39 39 39 39
39 38 38 37 37 37 37 37 37 36 36 35 35 35 35 35 35 35
35 35 35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 36
36 36 36 36 36 36 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 38 38 38 39 39
39 39 39 40 112 112 112]
对于顶部使用 argmin 或使用 img=255-img
反转极性,然后使用 argmax。