Numpy:使用sequen设置数组元素

2024-09-01 18:51:29 发布

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

我不知道我在这段代码上做错了什么:

import cv2
from matplotlib import image as img
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.pyplot import axis

img = cv2.imread('popi.png', 0)
cv2.imshow('lel', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
a = np.shape(img)
iloscpixeli = a[0] * a[1]
print(iloscpixeli)
b = np.zeros((256, 1))
H = np.zeros((a[0], a[1]))
# czest = np.zeros((256, 1))
# probf = np.zeros((256, 1))
# probc = np.zeros((256, 1))
# cum = np.zeros((256, 1))
dim = np.shape(img)
wyjscie = np.zeros(dim)
H = np.zeros(dim)
print("dim", dim)
czest = np.zeros(dim)
probc = np.zeros(dim)
# print("r",czest)
probf = np.zeros(dim)
cum = np.zeros(dim)
for i in range(1, a[0]):
    for j in range(1, a[1]):
        wartosc = img[i, j]
        czest[wartosc + 1] = (czest[wartosc + 1] + 1)
        probf[wartosc + 1] = czest[wartosc + 1] / iloscpixeli

suma = 0
nobins = 255
d = np.zeros((256, 1))
d1 = np.shape(d)
d11 = d1[0]

for i in range(1, d11):
    suma = suma + czest[i]
    cum[i] = suma
    probc[i] = cum[i] / iloscpixeli
    wyjscie[i] = np.around(probc[i] * nobins)
wyjscie=wyjscie.tolist()
for i in range(1, a[0]):
    for j in range(1, a[1]):
        H[i, j] = wyjscie[img[i,j] + 1]

cv2.imshow('wyrownany', H)

这句台词(是的,最后一句:C):

^{pr2}$

给我错误值error:用序列设置数组元素。正在尝试修复已检查的将“wyjscie”从数组更改为列表。。但效果不好。 我在找人帮忙。当你寻找代码的时候很好,可能我做了一些愚蠢的事情…但是有一行czest[wartosc + 1] = (czest[wartosc + 1] + 1),它工作得很好。。。在


Tags: inimportimgfornpzerosrangecv2
1条回答
网友
1楼 · 发布于 2024-09-01 18:51:29
  • H是一个默认为dtype=float的numpy数组。它的形状是二维的
  • 您想插入wyjscie[img[i,j] + 1]
  • wyjscie本身是一个二维的numpy数组
  • 您将wyjscie转换为一个列表,但该列表将是一个嵌套列表,因为原始dim是2d
  • 您在嵌套列表中编制索引,因此获得一个列表并将该列表放入一个单元格中,该单元格包含一个浮点=将序列/列表放入数组元素错误
  • (你是波兰人:-D)

相关问题 更多 >