파이썬의 이미지에서 픽셀 값을 검색하기 위해 'for 루프'속도를 높이는 방법은 무엇입니까?

Figx

160x160 이미지에서 각 픽셀의 값을 찾고 특정 강도가 관찰되는 값을 기록하는 다음 코드를 Python으로 작성했습니다.

def red_finder(img,fname):
resolution=img.shape
reds=[] #array to add intensity pixels

centre=np.divide(resolution,2)
for y in range(resolution[1]):
    for x in range(resolution[0]):
    #print img[x,y]
        if np.all(img[x,y]!=0):
            reds.append([x,y])
reds=np.array(reds)
(redx,redy)=(np.mean(reds,axis=0))
proc=(np.mean(reds,axis=0))
xray=proc-centre
return (xray[1],xray[0])

제 생각에는

for y in range(resolution[1]):
    for x in range(resolution[0]):
#print img[x,y]
    if np.all(img[x,y]!=0):
        reds.append([x,y])

각 픽셀을 스캔하는이 방법은 많은 시간을 소비합니다.

이미지 크기가 더 크고 때로는 다양하기 때문에 코드 속도를 높일 수있는 솔루션이 있습니까?

감사합니다.

잊어 버려

이중 for 루프는 numpy.where 호출로 대체 될 수 있습니다 .

def red_finder(img):
    resolution = img.shape
    centre = np.divide(resolution, 2)
    redx, redy = np.where(img != 0)
    proc = (redx.mean(), redy.mean())
    xray = proc - centre
    return (xray[1], xray[0])

참고 : 귀하의 코드 img가 2 차원을 의미한다고 생각 합니다 (그렇지 않으면 proc - center오류가 발생합니다). 따라서 img[x, y]스칼라 값입니다. 그래서 np.all(img[x, y] != 0)동일하다 img[x, y] != 0.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관