np.where가 이미지 픽셀을 처리할 때 주의해야 하는 작은 문제

np.where가 이미지 픽셀을 처리할 때 주의해야 하는 작은 문제

1. 문제 설명

픽셀 값이 특정 조건을 만족하는 픽셀만 수정하고 싶기 때문에 Numpywhere 메소드 를 사용합니다. .

이제 조건을 만족하는 픽셀 값에 델타를 더하고 싶은데요, 더해진 델타 값이 255보다 크면 픽셀 값을 255로 설정하고, 0보다 작으면 0으로 설정합니다. 델타가 추가될 때 값이 255보다 크면 포인트 값이 255로 설정되지 않는다는 것을 발견했습니다. 예를 들어 3*3 매트릭스를 사용하십시오.
이미지의 각 채널 요소의 비트 심도는 일반적으로 uint8 이므로 여기 이미지의 특정 채널의 매트릭스를 시뮬레이션하기 위해 Declare when 매트릭스를 생성합니다.dtype=np.uint8

delta=250
L1=np.array([[0,20,40],[3,14,4],[1,30,15]],dtype=np.uint8)
a1=np.where(L1+delta>255 ,255,0)

결과는 다음과 같습니다.

[[0 0 0]
 [0 0 0]
 [0 0 0]]

L1+delta>255의 값이 255로 설정되지 않은 것으로 나타났다.

2. 문제 분석

이것은 주로 L1 요소의 비트 심도와 관련이 있으며 uint8 의 범위 는 0~255 이며 합산 결과가 255 보다 크면 결과를 255 로 나누고 나머지를 취하게 됩니다. 255를 넘은 후 0부터 더하는 것입니다. 이런 식으로 L1+delta 값은 255보다 크지 않습니다.

3. 솔루션

L1의 비트 심도를 먼저 uint16으로 변경한 다음 작업 후 원래 uint8로 변경합니다(필요한 경우).

import numpy as np
import cv2
delta=250
L1=np.array([[0,20,40],[3,14,4],[1,30,15]],dtype=np.uint8)
L1=np.uint16(L1)
a1=np.where(L1+delta>255 ,255,0)
print(a1)

출력 결과:

[[  0 255 255]
 [  0 255   0]
 [  0 255 255]]

원래 픽셀 값에 델타를 더한 값이 255보다 크면 모두 255로 설정되어 문제가 해결된 것을 볼 수 있습니다!

Supongo que te gusta

Origin blog.csdn.net/qq_45160840/article/details/127547399
Recomendado
Clasificación