Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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_Image Processing_Connected Components - Fatal编程技术网

Python 用相应颜色替换圆形斑点

Python 用相应颜色替换圆形斑点,python,image-processing,connected-components,Python,Image Processing,Connected Components,我的目标是将遮罩_图像中的斑点替换为与原始_图像中斑点对应的颜色。我在这里做的是找到连接的组件并对它们进行标记,但我不知道如何找到相应的标记点并替换它。 如何将n个圆放入n个对象中,并用相应的强度填充它们? 任何帮助都将不胜感激 例如,如果遮罩图像(2,1)中的斑点应按下图中相应斑点的颜色绘制 遮罩图像 原始图像 完成这项任务有一个非常简单的方法。首先,需要对mask\u image中每个点中心的值进行采样。接下来,展开此颜色以填充同一图像中的点 以下是一些使用的代码(因为我比OpenCV更

我的目标是将
遮罩_图像
中的斑点替换为与
原始_图像
中斑点对应的颜色。我在这里做的是找到连接的组件并对它们进行标记,但我不知道如何找到相应的标记点并替换它。 如何将n个圆放入n个对象中,并用相应的强度填充它们? 任何帮助都将不胜感激

例如,如果遮罩图像(2,1)中的斑点应按下图中相应斑点的颜色绘制

遮罩图像

原始图像


完成这项任务有一个非常简单的方法。首先,需要对
mask\u image
中每个点中心的值进行采样。接下来,展开此颜色以填充同一图像中的点

以下是一些使用的代码(因为我比OpenCV更了解它,我是一名作者),我相信单用OpenCV也可以做类似的事情:

import PyDIP as dip
import cv2
import numpy as np

# Load the color image shown in the question
original_image = cv2.imread('/home/cris/tmp/BxW25.png')
# Load the mask image shown in the question
mask_image = cv2.imread('/home/cris/tmp/aqf3Z.png')[:,:,0]

# Get a single colored pixel in the middle of each spot of the mask
colors = dip.EuclideanSkeleton(mask_image > 50, 'loose ends away') * original_image

# Spread that color across the full spot
# (dilation and similar operators like this one don't work with color images,
#  so we apply the operation on each channel separately)
for t in range(colors.TensorElements()):
   colors.TensorElement(t).Copy(dip.MorphologicalReconstruction(colors.TensorElement(t), mask_image))

# Save the result
cv2.imwrite('/home/cris/tmp/so.png', np.array(colors))

我看不出你在哪里使用等高线。或者你为什么要用等高线我错了。。它应该是斑点,我现在纠正了它,不使用轮廓。你在这里不需要它们。你能告诉我如何用相应的专色替换整个专色网格吗?你不是把第二张图像叠加在第一张图像上,让黑色背景变成透明的吗?看起来不错。但是,在彩色图像上打开似乎也不起作用,无法将斑点放大到相同的大小……所有斑点的大小都应该相同。@ChinmayAthavale:我发布了错误的图片,我现在已经修复了。还有一个疑问。。是否有任何方法可以标记斑点并访问它们,以便找到单个斑点强度并通过标签打印它们如果使用PyDIP,则可以使用
dip.label
dip.MeasurementTool.Measure
获得输出图像中每个斑点内的平均RGB值。您还可以使用骨架(单像素遮罩)的输出,找到每个像素集的坐标(您将为每个点获得一组坐标),然后简单地读取这些坐标处的输入图像。只需对这些像素坐标进行排序就可以得到一个标签。你能给我一个opencv代码吗?我无法搜索类似的opencv函数,也无法安装PyDIP,因为它不在pypi上
import PyDIP as dip
import cv2
import numpy as np

# Load the color image shown in the question
original_image = cv2.imread('/home/cris/tmp/BxW25.png')
# Load the mask image shown in the question
mask_image = cv2.imread('/home/cris/tmp/aqf3Z.png')[:,:,0]

# Get a single colored pixel in the middle of each spot of the mask
colors = dip.EuclideanSkeleton(mask_image > 50, 'loose ends away') * original_image

# Spread that color across the full spot
# (dilation and similar operators like this one don't work with color images,
#  so we apply the operation on each channel separately)
for t in range(colors.TensorElements()):
   colors.TensorElement(t).Copy(dip.MorphologicalReconstruction(colors.TensorElement(t), mask_image))

# Save the result
cv2.imwrite('/home/cris/tmp/so.png', np.array(colors))