Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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

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_Computer Vision - Fatal编程技术网

Python 基于像素值比较多个图像

Python 基于像素值比较多个图像,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,嗨,我正在尝试比较一组图像,我想从每个单独的图像中产生一个最大像素的最终图像。假设我有3张转换成10x10矩阵的图像,其中我知道每个块的像素值>现在我想逐块比较这些值,并根据每个图像的最大块值生成最终的单独图像 为此,我更改了图像尺寸250x250,使每个块都是25x25的正方形 我甚至尝试比较两幅图像,从两幅图像中提取最大像素并显示它们 image = cv2.resize(im,(250,250)) hs,ws,c= image.shape print(hs, ws,c) hs = roun

嗨,我正在尝试比较一组图像,我想从每个单独的图像中产生一个最大像素的最终图像。假设我有3张转换成10x10矩阵的图像,其中我知道每个块的像素值>现在我想逐块比较这些值,并根据每个图像的最大块值生成最终的单独图像

为此,我更改了图像尺寸250x250,使每个块都是25x25的正方形

我甚至尝试比较两幅图像,从两幅图像中提取最大像素并显示它们

image = cv2.resize(im,(250,250))
hs,ws,c= image.shape
print(hs, ws,c)
hs = round(h/10)
ws = round(w/10)
resized = cv2.resize(image, (ws,hs), interpolation = cv2.INTER_AREA)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

print(list(resized))

这是两个图像,平铺图像是块比较两个图像的结果。现在使用这两幅图像,我想生成一幅与原始照片类似的最终图像,而不是平铺版本,但是最终照片应该有两幅原始照片的像素,每个像素最大。我希望它能澄清这个问题

为了更好的可视化,我跳过了整个调整大小的部分,坚持使用调整大小的250 x 250图像

我的方法如下:将所有调整大小的图像存储在一个NumPy数组中,尺寸为width x height x numberOfChannels x numberOfImages,然后使用NumPy的沿轴=3,这样,如果需要,可以在所有图像上获得具有最大BGR值或灰度的最终图像宽度x height x numberOfChannels

下面是一些示例代码:

进口cv2 将numpy作为np导入 设置空图像阵列 宽度,高度,n通道,nImages=250,250,3,3 图像=np.zeroswidth,高度,n通道,图像,np.uint8 读取示例性输入图像并调整其大小 图像[:,:,:,0]=cv2.resizecv2.imread'WeQow.png',宽度,高度 图像[:,:,:,1]=cv2.resizecv2.imread'gIHOd.png',宽度,高度 图像[:,:,:,2]=cv2.resizecv2.imread'lAdfO.jpg',宽度,高度 沿最后一个轴生成最大图像,即图像。 对于每个BGR值,您可以在所有图像上获得最大值。 图像=图像。最大轴=3 显示图像 imshow'image0',images[:,:,:,:,0] imshow'image1',images[:,:,:,:,1] imshow'image2',images[:,:,:,:,2] cv2.imshow‘image’,image cv2.0 cv2.1所有窗口 以下是三个输入图像:

最终输出图像如下所示:

希望有帮助

您可以尝试使用block\u reduce函数,使用块大小no\u的图像、通道、块高度、块宽度


如果您的输入图像为RGB比例,并且您希望每个通道的最大值输出图像中的RGB图像,则只需将通道值替换为1,或者如果您希望图像中各个通道的最大值,则使用3作为将生成灰度图像的通道值。

抱歉,但我不理解您的问题。请详细说明并显示一个图表或图像。@fmw42我有一组图像say 6,将其分为10x10块每幅图像。我做了所有的边缘检测。现在,从这六幅图像中,我想生成一幅最终图像,这样最终图像的像素值是所有这些单独图像的最大值。将每个图像视为一个层,最终图像必须具有最大6个图像块中的像素。我说得通吗?使用区域插值调整图像大小,以便调整图像大小,使较小图像中的每个像素代表较大图像中的10x10区域。对每个尺寸的图像都这样做。然后在每个缩小的图像之间逐像素获得最大值。见我的帖子。对每个图像都这样做。然后获得所有6张缩小图像的最大值。如果我误解了,请尝试再次解释或提供diagram@fmw42我已经更新了问题。希望它能提供一些清晰的解释:-@HansHirse谢谢你的努力。我尝试使用原始图像,我希望它会产生一个更清晰的图像,因为它会收集一个区域的最大像素值,但结果不是我预期的。有什么建议吗?@RockyJohanson你说的更清晰的图像是什么意思?例如,使用两幅图像的最大值,图像中的苍蝇不会变得更清晰。你到底想要实现什么?也许使用最大值对于您的原始问题是错误的,解决方案是完全不同的!?您可以再次编辑您的问题,但请确保不要使已给出的答案无效。如果主题/问题/问题太不一样,最好提出一个新问题。@HansHirse好的,我将发布一个新问题,并完整描述问题。谢谢你的努力。
#comparing two images
data = np.maximum.reduce([resized,resized1])
from matplotlib import pyplot as plt
plt.imshow(data, interpolation='nearest')
plt.show()
skimage.measure.block_reduce(np.asarray([image1, image2, image3,...]), (no_of_images, channels, 1, 1), np.max)