如何从图像背景中去除感兴趣的区域?

2024-05-19 02:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始研究模式识别中的图像处理,我需要识别毛发斑点的颜色。有了这个,我需要从这些图像中去除可能的噪音,比如头发,然后只对皮肤斑点进行处理,以便识别它们的颜色。因此,在三维图表中绘制颜色。你知道吗

enter image description hereenter image description here


Tags: 图像颜色图表绘制图像处理皮肤噪音头发
1条回答
网友
1楼 · 发布于 2024-05-19 02:26:33

首先,我会改变图像的颜色空间,这样我就可以对图像执行某种阈值,为进一步处理做好准备。在这个例子中,我尝试了转换到灰色空间,并与大津阈值和结果是好的。你知道吗

模糊+大津的结果:

enter image description here

但是请注意,如果你想自动化这样一个过程,那么你需要尝试不同的转化方法,因为我假设色素的颜色是不同的。首先看看HSV,GRAY,HLS颜色空间和BINARY,OTSU,自适应平均阈值。这一步的关键是使你感兴趣的地区团结起来,并与其他噪音区分开。一旦你弄明白了这一点,你可以开始搜索轮廓。在这种情况下,痣是最大的轮廓,但你应该注意,如果有其他噪音比这个痣大,选择最大的一个将不起作用。你必须制定其他标准来区别你观察到的轮廓(例如它的形状、高宽比等)。一旦你选择了你观察到的轮廓,把它画在一个新的空白掩模上,然后执行一些像cv2.bitwise_and()这样的算术运算,你就会得到结果。希望它能给你一个正确的方向。干杯!你知道吗

示例代码:

#Import all necessery libraries
import numpy as np
import cv2

#Read the image and perform threshold
img = cv2.imread('mole.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)
_,thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

#Search for contours and select the biggest one
_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = max(contours, key=cv2.contourArea)

#Create a new mask for the result image
h, w = img.shape[:2]
mask = np.zeros((h, w), np.uint8)

#Draw the contour on the new mask and perform the bitwise operation
cv2.drawContours(mask, [cnt],-1, 255, -1)
res = cv2.bitwise_and(img, img, mask=mask)

#Display the result
cv2.imwrite('mole_res.jpg', res)
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

enter image description here

相关问题 更多 >

    热门问题