Con trăn Colorsys

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Mô-đun 'colorsys' trong Python  được sử dụng để chuyển đổi xen kẽ các giá trị màu giữa RGB [Đỏ, Xanh lục và Xanh lam] thành ba loại khác là

  • YIQ [Độ chói trong pha [Cầu phương]
  • HLS [Độ bão hòa độ sáng Huế]
  • HSV [Giá trị bão hòa Huế]

Có sáu chức năng được xác định trước trong mô-đun này là

  1. rgb_to_yiq[r,g,b]. Phải mất 3 tham số tôi. e [r,g,b] và chuyển đổi thành định dạng YIQ
  2. rgb_to_hls[r,g,b]. Phải mất 3 tham số tôi. e [r,g,b] và chuyển đổi sang định dạng HLS
  3. rgb_to_hsv[r,g,b]. Nhận 3 tham số i. e [r,g,b] và chuyển đổi sang định dạng HSV
  4. yiq_to_rgb[y,i,q]. Phải mất 3 tham số tôi. e [y,i,q] và chuyển đổi sang định dạng RGB
  5. hls_to_rgb[h,l,s]. Phải mất 3 tham số tôi. e [h,l,s] và chuyển đổi sang định dạng RGB
  6. hsv_to_rgb[h,s,v]. Phải mất 3 tham số tôi. e [h,s,v] và chuyển đổi sang định dạng RGB

Hạn chế

Tất cả các tham số có giá trị dấu chấm động từ 0 đến 1 ngoại trừ trong hàm yiq_to_rgb. Ở đây y dương trong khi các tham số i và q cũng có thể có giá trị dấu chấm động âm

Mã để chứng minh hoạt động của từng chức năng

Bây giờ chúng ta hãy xem một mã mẫu. Mã này là một chương trình điều khiển bằng menu để cho phép người dùng sử dụng từng tùy chọn có sẵn

Nếu bạn thích hiệu suất, tốt nhất là tránh nhập và sử dụng mã được tối ưu hóa của riêng bạn

Đây là mã chính xác từ colorsys được sửa đổi một chút để làm cho mã byte nhanh hơn một chút

    def hsv_to_rgb[h, s, v]:
        if s == 0.0: return [v, v, v]
        i = int[h*6.] # XXX assume int[] truncates!
        f = [h*6.]-i; p,q,t = v*[1.-s], v*[1.-s*f], v*[1.-s*[1.-f]]; i%=6
        if i == 0: return [v, t, p]
        if i == 1: return [q, v, p]
        if i == 2: return [p, v, t]
        if i == 3: return [p, q, v]
        if i == 4: return [t, p, v]
        if i == 5: return [v, p, q]

đầu ra

>>> hsv_to_rgb[359,1,1]
[1, 0.0, 0.0]

Sử dụng chuỗi if như trên thực sự nhanh hơn sử dụng elif

Sử dụng trình bao bọc, như trong câu trả lời của Cyber, cần thêm một vài bước để trình thông dịch thực hiện.
Thêm vào đó, vòng lặp for trong ví dụ của Cyber ​​là một sát thủ thực sự khi được sử dụng như vậy

Nếu bạn muốn hiệu suất cao hơn một chút, chỉ cần làm điều này.
[Tôi sẽ không nói đây là hiệu suất tốt nhất có thể, nhưng nó chắc chắn tốt hơn]

    def hsv_to_rgb[h, s, v]:
        if s == 0.0: v*=255; return [v, v, v]
        i = int[h*6.] # XXX assume int[] truncates!
        f = [h*6.]-i; p,q,t = int[255*[v*[1.-s]]], int[255*[v*[1.-s*f]]], int[255*[v*[1.-s*[1.-f]]]]; v*=255; i%=6
        if i == 0: return [v, t, p]
        if i == 1: return [q, v, p]
        if i == 2: return [p, v, t]
        if i == 3: return [p, q, v]
        if i == 4: return [t, p, v]
        if i == 5: return [v, p, q]

^ điều này đảm bảo đầu ra int[] có phạm vi 255 [đầu vào vẫn như cũ]

>>> hsv_to_rgb[359./360.,1,1]
[255, 0, 0]

MẸO. tránh xa bên thứ 3 nếu có thể, hãy thử cách tiếp cận trực tiếp nếu bạn có thể.
loại trừ. các tiện ích mở rộng C đã biên dịch, chẳng hạn như PIL hoặc NumPy hoặc các trình bao bọc ctypes, chẳng hạn như PyOpenGL [sử dụng DLL]

Mô-đun colorsys xác định chuyển đổi hai chiều giá trị màu giữa các màu được biểu thị trong không gian màu RGB [Đỏ Lục Lam] được sử dụng trong màn hình máy tính và ba hệ tọa độ khác. YIQ, HLS [Độ bão hòa ánh sáng Huế] và HSV [Giá trị bão hòa Huế]. Các tọa độ trong tất cả các không gian màu này là các giá trị dấu phẩy động. Trong không gian YIQ, tọa độ Y nằm trong khoảng từ 0 đến 1, nhưng tọa độ I và Q có thể dương hoặc âm. Trong tất cả các không gian khác, tọa độ đều nằm trong khoảng từ 0 đến 1

Mô-đun colorsys xác định các chức năng sau

colorsys.rgb_to_yiq[r, g, b]

Chuyển đổi màu từ tọa độ RGB sang tọa độ YIQ

________số 8

Chuyển đổi màu từ tọa độ YIQ sang tọa độ RGB

colorsys.rgb_to_hls[r, g, b]

Chuyển đổi màu từ tọa độ RGB sang tọa độ HLS

>>> hsv_to_rgb[359,1,1]
[1, 0.0, 0.0]
0

Chuyển đổi màu từ tọa độ HLS sang tọa độ RGB

>>> hsv_to_rgb[359,1,1]
[1, 0.0, 0.0]
1

Chuyển đổi màu từ tọa độ RGB sang tọa độ HSV

>>> hsv_to_rgb[359,1,1]
[1, 0.0, 0.0]
2

Chuyển đổi màu từ tọa độ HSV sang tọa độ RGB

Ví dụ

>>> import colorsys
>>> colorsys.rgb_to_hsv[0.2, 0.4, 0.4]
[0.5, 0.5, 0.4]
>>> colorsys.hsv_to_rgb[0.5, 0.5, 0.4]
[0.2, 0.4, 0.4]

colorsys trong Python là gì?

Mô-đun colorsys xác định chuyển đổi hai chiều giá trị màu giữa các màu được biểu thị trong không gian màu RGB [Đỏ Lục Lam] được sử dụng trong màn hình máy tính và ba hệ tọa độ khác. YIQ, HLS [Độ bão hòa ánh sáng Huế] và HSV [Giá trị bão hòa Huế]

Làm cách nào để chuyển đổi RGB sang HSV trong Python?

Trong OpenCV, để chuyển đổi hình ảnh RGB sang hình ảnh HSV, chúng tôi sử dụng cv2. hàm cvtColor[] . Chức năng này được sử dụng để chuyển đổi một hình ảnh từ không gian màu này sang không gian màu khác.

Làm cách nào để chuyển đổi RGB sang HSL trong Python?

Để chuyển đổi giá trị màu RGB thành giá trị màu HSV trong Python, nhập thư viện colorsys, gọi hàm rgb_to_hsv[] và chuyển các giá trị Đỏ, Lục và Lam làm đối số. rgb_to_hsv[] function takes Red, Blue, and Green values as arguments, and returns a tuple containing Hue, Saturation, and Value.

Chủ Đề