0

我是一个编程初学者。我正在使用图像,我想用简单的代码分析它们(一开始)。

我有白色背景上有黑点的图像(JPEG 文件)。我想创建一个热图或密集图来识别我有很多点和我有很少点的区域。

我看到有些人使用 histogram2d 我必须输入 x 和 y 坐标。我知道图像是一个数组,因此它包含像素的 x,y 坐标,但我不知道如何访问它们以使用函数 histogram2d 例如。有人能帮我吗?因为我是初学者,所以我想得到一些解释,如果有人能这么好心地解释一下,我将非常感激。

也许还有另一个函数可以用于这种方法。如果是这样,请给我一些建议

预先感谢您帮助我。

我意识到我需要先拿到黑锅。所以我调整了代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
import random


#read image
img = cv2.imread("C:\\Users\\die5k\\Desktop\\NeuerOrdner\\eins.jpg")

#make Numpy array from image
n = np.array(img)

#search black pixels
#and gives an array of x and y coordinates of black pixels
#blacks = np.where((n[:, :, 0:3] == [0,0,0]).all(2))

xcoords, ycoords = np.where((n[:, :, 0:3] == [0,0,0]).all(2))

print(xcoords)
print(ycoords)

当我像上面那样单独尝试第一部分时效果很好,我得到了两个带有 x 和 y 坐标的数组!所以我把两个代码放在一起:

import cv2
import numpy as np
import matplotlib.pyplot as plt


def getcoordinates(img):
    #make Numpy array from image
    n = np.array(img)

    #search black pixels
    #and gives an array of x and y coordinates of black pixels
    xcoords, ycoords = np.where((n[:, :, 0:3] == [0,0,0]).all(2))

    print(xcoords)
    print(ycoords)


def getHistogramm(xcoords, ycoords):
    plt.hist2d(xcoords,ycoords,bins=50,cmap=plt.cm.jet)

    plt.title("test")

    plt.savefig("test1", bbox_inches='tight')

    plt.close()


if __name__ == '__main__':
    img = cv2.imread("C:\\Users\\die5k\\Desktop\\NeuerOrdner\\eins.jpg",0)
    getcoordinates(img)
    getHistogramm(xcoords, ycoords)

然后我得到一个我不明白的错误。

(注解)C:\Users\die5k\Desktop\NeuerOrdner>python combi.py Traceback(最近一次调用最后):文件“combi.py”,第31行,在getcoordinates(img)文件“combi.py”,第13行, 在 getcoordinates xcoords, ycoords = np.where((n[:, :, 0:3] == [0,0,0]).all(2)) IndexError: too many indices for array: array is 2-维度,但有 3 个被索引

什么地方出了错?

顺便说一句,我剪切了原始图像,使其仅包含一个用于尝试代码的黑点。

我有一个图像示例: 在此处输入图像描述

我想在这个网站上展示一些类似的东西:https ://python-graph-gallery.com/86-avoid-overlapping-in-scatterplot-with-2d-density/

4

0 回答 0