Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测灰度图像中黑色区域的存在_Python_Opencv_Image Processing_Machine Learning_Computer Vision - Fatal编程技术网

Python 检测灰度图像中黑色区域的存在

Python 检测灰度图像中黑色区域的存在,python,opencv,image-processing,machine-learning,computer-vision,Python,Opencv,Image Processing,Machine Learning,Computer Vision,我的目标很模糊,因此我没有任何可复制的代码 我想开发一个网络,我用特定类型的灰度图像来训练它,它将检测出高于特定灰度强度阈值的区域 我应该如何进一步进行这项工作?我需要神经网络吗 下面是一些示例图像。左边的那个是它应该是什么样子,中间的一个是当它发现有一些黑线(不完全是黑色的,但是在灰度强度的某个阈值以上),右边的那个是我期望我的代码的输出。 PS在检测CT扫描中的裂纹时,这一点特别重要,在其他灰度背景中,裂纹显示为深黑色斑点/线条 这是一个非常琐碎的问题,你肯定不需要神经网络来解决这个问题。如

我的目标很模糊,因此我没有任何可复制的代码

我想开发一个网络,我用特定类型的灰度图像来训练它,它将检测出高于特定灰度强度阈值的区域

我应该如何进一步进行这项工作?我需要神经网络吗

下面是一些示例图像。左边的那个是它应该是什么样子,中间的一个是当它发现有一些黑线(不完全是黑色的,但是在灰度强度的某个阈值以上),右边的那个是我期望我的代码的输出。 PS在检测CT扫描中的裂纹时,这一点特别重要,在其他灰度背景中,裂纹显示为深黑色斑点/线条


这是一个非常琐碎的问题,你肯定不需要神经网络来解决这个问题。如果您正在处理灰度图像,并且知道您感兴趣的强度阈值(例如,允许强度值高达3),则只需执行简单的阈值操作即可识别黑色区域

这可能也适用于您的ct扫描应用程序,前提是这些“裂缝”的强度始终非常低

例如,对于我在示例图像中应用“裂缝”的ct图像,这些裂缝的阈值将非常有效(您只会得到一些背景噪声/瑕疵)。请参见以下截取的OpenCV:

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('chest-ct-lungs.jpg',0)
ret,thresh = cv2.threshold(img,3,255,cv2.THRESH_BINARY)
cv2.imwrite('output.png',thresh)
输入:

原始图像来源:www.radiologyinfo.org

输出:


正如您所看到的,这实际上只是3行代码,不要总是假设您必须使用神经网络来处理所有事情,有时最好只是用“老式方式”解决图像处理问题。特别是如果问题很小的话

它太模糊了,您可能可以添加一些示例图像。这个链接可能会给你一些指导-你需要一个网络做什么?如果你的目标是一个全局阈值,只需应用一个。添加一些好的和不好的示例图像,我相信会有人能够提供帮助。黑色区域将在图像中以较低的数字表示,因为它们的亮度或强度较低,所以你可能希望检测阈值以下的项目。你可能不需要神经网络,但你需要一些更具代表性的图像。@vedantgala只要裂缝的强度没有改变,无论扫描的身体部位如何,树洞仍然会产生相同的结果。你知道我怎样才能得到线条周围的红色框,并将这些线条保留在同一图像上吗?@vedantgala计算相反,使用反向二进制图像(使用选项
THRESH\u binary\u INV
),然后使用
findContours
计算此图像的计数。使用
boundingRect
函数计算每个轮廓的边界框,最后将它们绘制到原始图像上。关于如何使用OpenCV实现这一点,应该有很多教程。