gpt4 book ai didi

python - 查找 SEM 图像中 "cracks"的百分比

转载 作者:行者123 更新时间:2023-12-02 09:53:52 24 4
gpt4 key购买 nike

我们有某种阴极 Material 的扫描电子显微镜 (SEM) 图像,我的目标是找出图像中裂纹所占的百分比。关于如何做到这一点有什么建议吗?目前,我只是尝试找到图像中“最暗”像素的数量,并获取图像中像素总数的百分比。 enter image description here

这是迄今为止我的代码:

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True, help = "path to input image")
args = vars(ap.parse_args())

image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY)[1]
#imageCanny = cv2.Canny(blurred, 100, 200, 3)


#total number of pixels in the image = 1280x960 = 1228800
count = cv2.countNonZero(thresh)
img, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0,255,255), 2)
print(count)

如果我执行 countNonZero(image) ,我会在函数 countNonZero 中收到错误 (-215) cn == 1 ,但当我执行 countNonZero(脱粒)。我是否正确地找到了最暗的像素?

最佳答案

如果将“裂纹”定义为暗像素,则可以使用 np.where() 来隔离低于某个阈值的裂纹。基本上任何低于该阈值的像素都将被定义为裂缝。这将为您提供一个灰度图像,您可以在其中使用cv2.countNonZero()来确定裂纹百分比。使用阈值 30(可以在 [0..255] 范围内调整)的结果如下:

enter image description here

Crack percentage: 16.74%

代码

import cv2
import numpy as np

# Load image as grayscale, change all pixels less than some threshold to black
image = cv2.imread('1.jpg', 0)
w,h = image.shape
image[np.where(image <= 30)] = 0

# Count non-crack pixels
pixels = cv2.countNonZero(image)

# Calculate crack percentage
percentage = 100 - (pixels / (w * h)) * 100
print('Crack percentage: {:.2f}%'.format(percentage))

cv2.imshow('image', image)
cv2.waitKey()

关于python - 查找 SEM 图像中 "cracks"的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com