>

이미지를로드했습니다 ( cv2.imread_color 포함) )를 목록에 넣고 함수 rgb_to_hsv 를 사용하여 hsv (색조, 토성, 값) 값을 가져 오려고합니다. .

빨간색, 녹색 및 파란색 값이 있지만 hsv 값을 가져 오려고하면매개 변수에 대한 오류가 표시됩니다.

Traceback (most recent call last):
  File "C:\Users\Downloads\preprocessing\program.py", line 69, in <module>
    hue_images[i], saturnation_images[i], value_images[i] = rgb_to_hsv(hsv_red[i], hsv_green[i], hsv_blue[i])
File "C:\Users\Downloads\preprocessing\program.py", line 24, in rgb_to_hsv
    mx = max(r, g, b)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

이것은 내가 사용하는 코드입니다 :

hue_images = list(range(len(image)))
saturnation_images = list(range(len(image)))
value_images = list(range(len(image)))
hsv_red = list(range(len(image)))
hsv_green = list(range(len(image)))
hsv_blue = list(range(len(image)))
def rgb_to_hsv(r, g, b):
    r, g, b = r/255.0, g/255.0, b/255.0
    mx = max(r, g, b)
    mn = min(r, g, b)
    df = mx-mn
    if mx == mn:
        h = 0
    elif mx == r:
        h = (60 * ((g-b)/df) + 360) % 360
    elif mx == g:
        h = (60 * ((b-r)/df) + 120) % 360
    elif mx == b:
        h = (60 * ((r-g)/df) + 240) % 360
    if mx == 0:
        s = 0
    else:
        s = (df/mx)*100
    v = mx*100
    return h, s, v
def hsv_get_red(img):
    red = img.copy()
    red[:, :, 0] = 0
    red[:, :, 1] = 0
    return red[:, :, 2]
def hsv_get_green(img):
    green = img.copy()
    green[:, :, 0] = 0
    green[:, :, 2] = 0
    return green[:, :, 1]
def hsv_get_blue(img):
    blue = img.copy()
    blue[:, :, 2] = 0
    blue[:, :, 1] = 0
    return blue[:, :, 0]
for i in range(len(image)):
    hsv_red[i] = hsv_get_red(image[i])
    hsv_green[i] = hsv_get_green(image[i])
    hsv_blue[i] = hsv_get_blue(image[i])
for i in range(len(image)):
    hue_images[i], saturnation_images[i], value_images[i] = rgb_to_hsv(hsv_red[i], hsv_green[i], hsv_blue[i])

내 질문은 : 함수에서 목록 값을 매개 변수로 사용하여 int 숫자와 함께 작동하여 결과 (다른 목록 값)를 얻는 방법은 무엇입니까?


  • 답변 # 1

    r  와이즈 비즈  와이즈 비즈  전달하는 매개 변수는 opencv 라이브러리의 매트 "배열"입니다

    내장 된 g  그리고 b  함수는 처리 방법을 모릅니다. numpy 라이브러리의 최소 및 최대 함수를 사용해야합니다

    min
    
    

    또는 모든 r, g, b 값을 수동으로 반복하여 numpy 의존성을 원하지 않는 경우 최소 및 최대 값을 찾으십시오 (예 :

    max
    
    

    안타깝게도 cv2.min은 numpy min처럼 작동하지 않으며 여기에서는 유용하지 않습니다

    import numpy as np np.max([r,g,b])

  • 이전 C ++ 삽입 연산자 (<<) 오버로드
  • 다음 javascript - 모든 API 응답이있을 때까지 각도 7에서 페이지로드에로드 표시기를 표시하는 방법은 무엇입니까?