Phát hiện màu hsv không gian màu opencv với python

Không gian màu trong OpenCV. con trăn

Cải thiện bài viết

Lưu bài viết

Thích bài viết

  • Độ khó. Trung bình
  • Cập nhật lần cuối. 20 tháng 4 năm 2022

  • Đọc
  • Bàn luận
  • Thực tiễn
  • Video
  • khóa học
  • Cải thiện bài viết

    Lưu bài viết

    Không gian màu là một cách để thể hiện các kênh màu có trong hình ảnh mang lại cho hình ảnh sắc thái cụ thể. Có một số không gian màu khác nhau và mỗi không gian có ý nghĩa riêng. Một số không gian màu phổ biến là RGB [Đỏ, Lục, Lam], CMYK [Cyan, Magenta, Yellow, Black], HSV [Hue, Saturation, Value], v.v. Không gian màu BGR. Không gian màu mặc định của OpenCV là RGB. Tuy nhiên, nó thực sự lưu trữ màu ở định dạng BGR. Đây là một mô hình màu bổ sung trong đó các cường độ khác nhau của Xanh lam, Xanh lục và Đỏ cho các sắc thái màu khác nhau.

    Không gian màu HSV. Nó lưu trữ thông tin màu trong một biểu diễn hình trụ của các điểm màu RGB. Nó cố gắng mô tả màu sắc theo cảm nhận của mắt người. Giá trị Huế thay đổi từ 0-179, Giá trị bão hòa thay đổi từ 0-255 và Giá trị giá trị thay đổi từ 0-255. Nó chủ yếu được sử dụng cho mục đích phân đoạn màu.
    Không gian màu CMYK. Không giống như, RGB nó là một không gian màu trừ. Mô hình CMYK hoạt động bằng cách che một phần hoặc toàn bộ các màu trên nền sáng hơn, thường là màu trắng. Mực làm giảm ánh sáng mà nếu không sẽ bị phản xạ. Mô hình như vậy được gọi là phép trừ vì mực “trừ” các màu đỏ, lục và lam khỏi ánh sáng trắng. Ánh sáng trắng trừ lá đỏ lục lam, ánh sáng trắng trừ lá xanh lá cây đỏ tươi và ánh sáng trắng trừ lá xanh dương vàng.
    Trực quan hóa các kênh màu khác nhau của hình ảnh RGB.

    Python3




    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    9
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    0

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    1
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    2
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    3______64
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    6______62
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    8

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    00

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    01

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    02
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    03
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    05

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    02
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    03
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    09

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    02
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    03
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    13

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    02
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    03
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

     

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    17

    đầu ra.

    Ghi chú cá nhân của tôi arrow_drop_up

    Tiết kiệm

    Vui lòng Đăng nhập để nhận xét.

    Đó có thể là thời đại của học sâu và dữ liệu lớn, trong đó các thuật toán phức tạp phân tích hình ảnh bằng cách hiển thị hàng triệu hình ảnh, nhưng không gian màu vẫn hữu ích một cách đáng ngạc nhiên cho phân tích hình ảnh. Phương pháp đơn giản vẫn có thể mạnh mẽ

    Trong bài viết này, bạn sẽ tìm hiểu cách đơn giản để phân đoạn một đối tượng từ một hình ảnh dựa trên màu sắc trong Python bằng OpenCV. Một thư viện thị giác máy tính phổ biến được viết bằng C/C++ với các liên kết dành cho Python, OpenCV cung cấp các cách dễ dàng để thao tác với không gian màu

    Mặc dù bạn không cần phải quen thuộc với OpenCV hoặc các gói trợ giúp khác được sử dụng trong bài viết này, nhưng giả định rằng bạn ít nhất phải có hiểu biết cơ bản về viết mã trong Python

    Tiền thưởng miễn phí. Nhấp vào đây để nhận Hướng dẫn nhỏ về các ví dụ về OpenCV và Nhận dạng khuôn mặt Python cho bạn thấy các ví dụ mã thực tế về các kỹ thuật thị giác máy tính Python trong thế giới thực

    Không gian màu là gì?

    Trong không gian màu phổ biến nhất, RGB [Red Green Blue], các màu được thể hiện dưới dạng các thành phần đỏ, lục và lam của chúng. Theo thuật ngữ kỹ thuật hơn, RGB mô tả một màu là một bộ gồm ba thành phần. Mỗi thành phần có thể nhận giá trị từ 0 đến 255, trong đó bộ dữ liệu

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    8 đại diện cho màu đen và
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    9 đại diện cho màu trắng

    RGB được coi là một không gian màu "phụ gia" và màu sắc có thể được hình dung như được tạo ra từ việc chiếu một lượng ánh sáng đỏ, xanh dương và xanh lục lên nền đen

    Dưới đây là một vài ví dụ khác về màu sắc trong RGB

    Màu Giá trị RGBĐỏ255, 0, 0Cam255, 128, 0Hồng255, 153, 255

    RGB là một trong năm mô hình không gian màu chính, mỗi mô hình có nhiều nhánh. Có rất nhiều không gian màu vì các không gian màu khác nhau hữu ích cho các mục đích khác nhau

    Trong thế giới in ấn, CMYK rất hữu ích vì nó mô tả các kết hợp màu cần thiết để tạo ra màu từ nền trắng. Trong khi bộ 0 trong RGB có màu đen, thì trong CMYK, bộ 0 có màu trắng. Máy in của chúng tôi chứa hộp mực màu lục lam, đỏ tươi, vàng và đen

    Trong một số loại lĩnh vực y tế, các phiến kính gắn với các mẫu mô nhuộm màu được quét và lưu dưới dạng hình ảnh. Chúng có thể được phân tích trong không gian HED, đại diện cho độ bão hòa của các loại vết—hematoxylin, eosin và DAB—được áp dụng cho mô ban đầu

    HSV và HSL là các mô tả về màu sắc, độ bão hòa và độ sáng/độ chói, đặc biệt hữu ích để xác định độ tương phản trong hình ảnh. Những không gian màu này thường được sử dụng trong các công cụ chọn màu trong phần mềm và thiết kế web

    Trong thực tế, màu sắc là một hiện tượng liên tục, có nghĩa là có vô số màu sắc. Tuy nhiên, không gian màu thể hiện màu sắc thông qua các cấu trúc rời rạc [một số lượng cố định các giá trị số nguyên], điều này có thể chấp nhận được do mắt người và nhận thức cũng bị hạn chế. Không gian màu hoàn toàn có thể biểu thị tất cả các màu mà chúng ta có thể phân biệt giữa

    Bây giờ chúng ta đã hiểu khái niệm về không gian màu, chúng ta có thể tiếp tục sử dụng chúng trong OpenCV

    Loại bỏ các quảng cáo

    Phân đoạn đơn giản bằng cách sử dụng không gian màu

    Để minh họa kỹ thuật phân đoạn không gian màu, chúng tôi đã cung cấp một bộ dữ liệu nhỏ gồm các hình ảnh của cá hề trong kho tài liệu Real Python tại đây để bạn tải xuống và sử dụng. Cá hề rất dễ nhận dạng bởi màu cam sáng của chúng, vì vậy chúng là ứng cử viên sáng giá để phân khúc. Hãy xem chúng ta có thể tìm thấy Nemo tốt như thế nào trong một hình ảnh

    Các gói Python chính mà bạn cần theo dõi là NumPy, gói quan trọng nhất dành cho tính toán khoa học bằng Python, Matplotlib, thư viện vẽ đồ thị và tất nhiên là OpenCV. Bài viết này sử dụng OpenCV 3. 2. 0, NumPy 1. 12. 1 và Matplotlib 2. 0. 2. Các phiên bản hơi khác nhau sẽ không tạo ra sự khác biệt đáng kể về mặt theo dõi và nắm bắt các khái niệm

    Nếu bạn không quen thuộc với NumPy hoặc Matplotlib, bạn có thể đọc về chúng trong hướng dẫn chính thức của NumPy và bài viết xuất sắc của Brad Solomon về Matplotlib

    Không gian màu và đọc hình ảnh trong OpenCV

    Trước tiên, bạn sẽ cần thiết lập môi trường của mình. Bài viết này sẽ giả sử bạn có Python 3. x được cài đặt trên hệ thống của bạn. Lưu ý rằng mặc dù phiên bản hiện tại của OpenCV là 3. x, tên gói cần nhập vẫn là

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    0

    >>>

    >>> import cv2
    

    Nếu trước đó bạn chưa cài đặt OpenCV trên máy tính của mình, quá trình nhập sẽ không thành công cho đến khi bạn thực hiện việc đó trước. Bạn có thể tìm thấy hướng dẫn thân thiện với người dùng để cài đặt trên các hệ điều hành khác nhau tại đây, cũng như hướng dẫn cài đặt riêng của OpenCV. Khi bạn đã nhập thành công OpenCV, bạn có thể xem tất cả các chuyển đổi không gian màu mà OpenCV cung cấp và bạn có thể lưu tất cả chúng vào một biến

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    

    Danh sách và số lượng cờ có thể thay đổi một chút tùy thuộc vào phiên bản OpenCV của bạn, nhưng bất kể, sẽ có rất nhiều. Xem bạn có bao nhiêu cờ

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    

    Các ký tự đầu tiên sau

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    1 biểu thị không gian màu gốc và các ký tự sau
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    2 là không gian màu đích. Cờ này biểu thị chuyển đổi từ BGR [Xanh lam, Xanh lục, Đỏ] sang RGB. Như bạn có thể thấy, hai không gian màu rất giống nhau, chỉ có kênh đầu tiên và kênh cuối cùng được hoán đổi

    Bạn sẽ cần

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    3 để xem hình ảnh và NumPy để thao tác với hình ảnh. Nếu bạn chưa cài đặt Matplotlib hoặc NumPy, bạn sẽ cần phải
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    4 và
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5 trước khi thử nhập

    >>>

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    

    Bây giờ bạn đã sẵn sàng để tải và kiểm tra một hình ảnh. Lưu ý rằng nếu bạn đang làm việc từ dòng lệnh hoặc thiết bị đầu cuối, hình ảnh của bạn sẽ xuất hiện trong cửa sổ bật lên. Nếu bạn đang làm việc trong sổ ghi chép Jupyter hoặc thứ gì đó tương tự, chúng sẽ chỉ hiển thị bên dưới. Bất kể thiết lập của bạn là gì, bạn sẽ thấy hình ảnh được tạo bởi lệnh

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    6

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    3

    Này, Nemo…hay Dory? . Thực tế OpenCV mặc định đọc ảnh ở định dạng BGR. Bạn có thể sử dụng

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    7 và cờ mà chúng tôi đã xem xét ở trên để khắc phục điều này

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    5

    Bây giờ Nemo trông giống mình hơn nhiều

    Loại bỏ các quảng cáo

    Hình dung Nemo trong không gian màu RGB

    HSV là một lựa chọn tốt về không gian màu để phân đoạn theo màu, nhưng để biết lý do tại sao, hãy so sánh hình ảnh trong cả không gian màu RGB và HSV bằng cách trực quan hóa sự phân bố màu của các pixel của nó. Biểu đồ 3D hiển thị điều này khá độc đáo, với mỗi trục biểu thị một trong các kênh trong không gian màu. Nếu bạn muốn biết cách tạo cốt truyện 3D, hãy xem phần thu gọn

    Cách tạo biểu đồ phân tán 3D có màuHiển thị/Ẩn

    Để tạo cốt truyện, bạn sẽ cần thêm một vài thư viện Matplotlib

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    6

    Những thư viện đó cung cấp các chức năng bạn cần cho cốt truyện. Bạn muốn đặt từng pixel vào vị trí của nó dựa trên các thành phần của nó và tô màu theo màu của nó. OpenCV

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    8 rất tiện dụng ở đây; . Một vài dòng mã này phân tách hình ảnh và thiết lập biểu đồ 3D

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    8

    Bây giờ bạn đã thiết lập cốt truyện, bạn cần thiết lập màu pixel. Để tô màu từng pixel theo màu thật của nó, cần phải định hình lại và chuẩn hóa một chút. Nó trông có vẻ lộn xộn, nhưng về cơ bản, bạn cần các màu tương ứng với mọi pixel trong ảnh được làm phẳng thành một danh sách và được chuẩn hóa, để chúng có thể được chuyển đến tham số

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    9 của Matplotlib
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    30

    Bình thường hóa chỉ có nghĩa là cô đặc dải màu từ

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    31 đến
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    32 theo yêu cầu đối với tham số
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    9. Cuối cùng,
    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    9 muốn một danh sách, không phải một mảng NumPy

    >>>

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    5

    Bây giờ chúng tôi có tất cả các thành phần đã sẵn sàng để vẽ. vị trí pixel cho mỗi trục và màu tương ứng của chúng, ở định dạng mà

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    9 dự kiến. Bạn có thể xây dựng biểu đồ phân tán và xem nó

    >>>

    >>> import matplotlib.pyplot as plt
    >>> import numpy as np
    
    7

    Đây là biểu đồ phân tán màu cho hình ảnh Nemo trong RGB

    Từ biểu đồ này, bạn có thể thấy rằng các phần màu cam của hình ảnh trải dài gần như toàn bộ phạm vi giá trị màu đỏ, xanh lá cây và xanh dương. Vì các phần của Nemo trải dài trên toàn bộ cốt truyện nên việc phân chia Nemo ra trong không gian RGB dựa trên phạm vi giá trị RGB sẽ không dễ dàng

    Trực quan hóa Nemo trong Không gian màu HSV

    Chúng ta đã thấy Nemo trong không gian RGB, vì vậy bây giờ hãy xem anh ấy trong không gian HSV và so sánh

    Như đã đề cập ngắn gọn ở trên, HSV là viết tắt của Hue, Saturation và Value [hoặc độ sáng] và là một không gian màu hình trụ. Màu sắc hoặc sắc thái được mô hình hóa dưới dạng kích thước góc xoay quanh trục dọc, trung tâm, đại diện cho kênh giá trị. Các giá trị chuyển từ tối [0 ở dưới cùng] sang sáng ở trên cùng. Trục thứ ba, độ bão hòa, xác định sắc thái của màu sắc từ ít bão hòa nhất, ở trục dọc, đến bão hòa nhất ở xa trung tâm nhất

    Hình ảnh. Wikipedia

    Để chuyển đổi hình ảnh từ RGB sang HSV, bạn có thể sử dụng

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    36

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    0

    Bây giờ

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    37 lưu trữ biểu diễn của Nemo trong HSV. Sử dụng kỹ thuật tương tự như trên, chúng ta có thể xem biểu đồ hình ảnh trong HSV, được tạo bởi phần thu gọn bên dưới

    Tạo Biểu đồ tán xạ 3D có màu cho hình ảnh trong HSVHiển thị/Ẩn

    Mã để hiển thị hình ảnh trong HSV giống như đối với RGB. Lưu ý rằng bạn sử dụng cùng một biến

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    38 để tô màu các pixel, vì Matplotlib mong đợi các giá trị ở dạng RGB

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    1

    Trong không gian HSV, cam của Nemo được bản địa hóa nhiều hơn và có thể phân biệt trực quan. Độ bão hòa và giá trị của màu cam khác nhau, nhưng chúng chủ yếu nằm trong một phạm vi nhỏ dọc theo trục màu sắc. Đây là điểm mấu chốt có thể được tận dụng để phân khúc

    Chọn ra một phạm vi

    Hãy ngưỡng mộ Nemo chỉ dựa trên một dãy cam đơn giản. Bạn có thể chọn phạm vi bằng cách đánh nhãn cầu ở trên hoặc sử dụng ứng dụng chọn màu trực tuyến, chẳng hạn như công cụ RGB to HSV này. Các mẫu màu được chọn ở đây là màu cam nhạt và màu cam đậm hơn gần như đỏ

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    2

    Nếu bạn muốn sử dụng Python để hiển thị các màu bạn đã chọn, hãy nhấp vào phần thu gọn

    Hiển thị màu HSV đã chọnHiển thị/Ẩn

    Một cách đơn giản để hiển thị màu trong Python là tạo các hình vuông nhỏ có màu mong muốn và vẽ chúng trong Matplotlib. Matplotlib chỉ diễn giải các màu trong RGB, nhưng các chức năng chuyển đổi tiện dụng được cung cấp cho các không gian màu chính để chúng ta có thể vẽ các hình ảnh trong các không gian màu khác

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    3

    Sau đó, xây dựng các ô vuông nhỏ

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    39, tô màu tương ứng. Bạn có thể sử dụng NumPy để dễ dàng tô màu cho các ô vuông

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    4

    Cuối cùng, bạn có thể vẽ chúng lại với nhau bằng cách chuyển đổi chúng sang RGB để xem

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    5

    Điều đó tạo ra những hình ảnh này, chứa đầy các màu đã chọn

    Khi bạn có được dải màu phù hợp, bạn có thể sử dụng

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    50 để thử ngưỡng Nemo.
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    51 có ba tham số. hình ảnh, phạm vi thấp hơn và phạm vi cao hơn. Nó trả về một mặt nạ nhị phân [một
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    52 của 1 và 0] kích thước của hình ảnh trong đó các giá trị của
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    53 biểu thị các giá trị trong phạm vi và các giá trị 0 biểu thị các giá trị bên ngoài

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    6

    Để áp đặt mặt nạ lên trên hình ảnh gốc, bạn có thể sử dụng

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    54, giữ mọi pixel trong hình ảnh đã cho nếu giá trị tương ứng trong mặt nạ là
    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    53

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    7

    Để xem chính xác những gì đã làm, hãy xem cả mặt nạ và hình ảnh gốc với mặt nạ ở trên cùng

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    8

    Ở đó bạn có nó. Điều này đã hoàn thành tốt việc chụp các phần màu cam của cá. Vấn đề duy nhất là Nemo cũng có sọc trắng… May mắn thay, việc thêm mặt nạ thứ hai tìm kiếm màu trắng rất giống với những gì bạn đã làm với những quả cam

    >>>

    >>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]
    
    9

    Khi bạn đã chỉ định dải màu, bạn có thể xem các màu bạn đã chọn

    Hiển thị màu trắngHiển thị/Ẩn

    Để hiển thị màu trắng, bạn có thể thực hiện phương pháp tương tự như chúng tôi đã làm trước đây với màu cam

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    0

    Phạm vi trên tôi đã chọn ở đây là màu trắng rất xanh, vì màu trắng có pha chút xanh trong bóng tối. Hãy tạo mặt nạ thứ hai và xem nó có bắt được sọc của Nemo không. Bạn có thể tạo mặt nạ thứ hai giống như cách bạn đã làm với mặt nạ đầu tiên

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    1

    Không tệ. Bây giờ bạn có thể kết hợp các mặt nạ. Cộng hai mặt nạ lại với nhau sẽ tạo ra giá trị

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    53 ở bất cứ đâu có màu cam hoặc trắng, đó chính xác là những gì cần thiết. Hãy thêm các mặt nạ lại với nhau và vẽ kết quả

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    2

    Về cơ bản, bạn có một phân đoạn sơ bộ của Nemo trong không gian màu HSV. Bạn sẽ nhận thấy có một vài pixel đi lạc dọc theo đường viền phân đoạn và nếu muốn, bạn có thể sử dụng hiệu ứng làm mờ Gaussian để dọn dẹp các phát hiện sai nhỏ

    Gaussian blur là một bộ lọc hình ảnh sử dụng một loại hàm gọi là Gaussian để biến đổi từng pixel trong ảnh. Nó có kết quả là làm mịn nhiễu hình ảnh và giảm chi tiết. Đây là cách áp dụng độ mờ cho hình ảnh của chúng ta

    >>>

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    3

    Loại bỏ các quảng cáo

    Sự phân khúc này có khái quát hóa đối với họ hàng của Nemo không?

    Để giải trí, chúng ta hãy xem kỹ thuật phân đoạn này tổng quát tốt như thế nào đối với các hình ảnh cá hề khác. Trong kho lưu trữ, có tuyển chọn sáu hình ảnh về cá hề từ Google, được cấp phép sử dụng công khai. Các hình ảnh nằm trong thư mục con và được lập chỉ mục nemoi. jpg, trong đó tôi là chỉ mục từ

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    57

    Đầu tiên, tải tất cả họ hàng của Nemo vào một danh sách

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    4

    Bạn có thể kết hợp tất cả các mã được sử dụng ở trên để phân đoạn một con cá thành một hàm sẽ lấy hình ảnh làm đầu vào và trả về hình ảnh được phân đoạn. Mở rộng phần này để xem nó trông như thế nào

    Hàm Segment FishHiển thị/Ẩn

    Đây là hàm

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    58

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    5

    Với chức năng hữu ích đó, bạn có thể phân đoạn tất cả cá

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    6

    Hãy xem tất cả các kết quả bằng cách vẽ chúng trong một vòng lặp

    >>> len[flags]
    258
    >>> flags[40]
    'COLOR_BGR2RGB'
    
    7

    Cá hề tiền cảnh có màu cam đậm hơn phạm vi của chúng tôi

    Nửa dưới bóng của cháu trai Nemo bị loại trừ hoàn toàn, nhưng các mẩu hải quỳ tím ở hậu cảnh trông rất giống các sọc nhuốm màu xanh của Nemo…

    Nhìn chung, phương pháp phân khúc đơn giản này đã định vị thành công phần lớn họ hàng của Nemo. Tuy nhiên, rõ ràng là việc phân đoạn một con cá hề với ánh sáng và phông nền cụ thể có thể không nhất thiết phải khái quát tốt để phân đoạn tất cả cá hề.

    Sự kết luận

    Trong hướng dẫn này, bạn đã biết một số không gian màu khác nhau là gì, cách một hình ảnh được phân phối trên các không gian màu RGB và HSV và cách sử dụng OpenCV để chuyển đổi giữa các không gian màu và phân chia phạm vi

    Nhìn chung, bạn đã học cách hiểu cơ bản về cách sử dụng không gian màu trong OpenCV để thực hiện phân đoạn đối tượng trong hình ảnh và hy vọng cũng thấy được tiềm năng của nó để thực hiện các tác vụ khác. Khi ánh sáng và nền được kiểm soát, chẳng hạn như trong môi trường thử nghiệm hoặc với tập dữ liệu đồng nhất hơn, kỹ thuật phân đoạn này đơn giản, nhanh chóng và đáng tin cậy

    Đánh dấu là đã hoàn thành

    🐍 Thủ thuật Python 💌

    Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

    Gửi cho tôi thủ thuật Python »

    Về đá Rebecca

    Rebecca là nghiên cứu sinh tiến sĩ về thị giác máy tính và trí tuệ nhân tạo áp dụng cho hình ảnh y tế. Cô say mê giảng dạy

    » Thông tin thêm về Rebecca

    Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

    Adriana

    David

    Joanna

    Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

    Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

    Nâng cao kỹ năng Python của bạn »

    Bậc thầy Kỹ năng Python trong thế giới thực
    Với quyền truy cập không giới hạn vào Python thực

    Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

    Nâng cao kỹ năng Python của bạn »

    Bạn nghĩ sao?

    Đánh giá bài viết này

    Tweet Chia sẻ Chia sẻ Email

    Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

    Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

    Làm cách nào để biết HSV của tôi có màu gì?

    Để tìm giá trị HSV của một màu, chúng ta có thể sử dụng chuyển đổi không gian màu từ BGR sang HSV . Trước tiên, chúng tôi xác định giá trị màu ở định dạng BGR là numpy. ndarray và sau đó chuyển đổi nó thành không gian HSV. Chúng ta cũng có thể tìm thấy giới hạn dưới và trên của giá trị HSV lần lượt là [H-10, 100, 100] và [H+10, 255, 255].

    Làm cách nào để OpenCV xác định các màu cụ thể?

    Để phát hiện màu sắc trong ảnh, điều đầu tiên bạn cần làm là xác định giới hạn trên và dưới cho các giá trị pixel của mình. Khi bạn đã xác định giới hạn trên và dưới của mình, sau đó bạn thực hiện cuộc gọi đến cv2. phương thức inRange trả về mặt nạ, chỉ định pixel nào nằm trong phạm vi trên và dưới được chỉ định của bạn

    Không gian màu HSV OpenCV là gì?

    Không gian màu HSV. Nó lưu trữ thông tin màu dưới dạng biểu diễn hình trụ gồm các điểm màu RGB . Nó cố gắng mô tả màu sắc mà mắt người cảm nhận được. Giá trị Huế thay đổi từ 0-179, Giá trị bão hòa thay đổi từ 0-255 và Giá trị giá trị thay đổi từ 0-255. Nó chủ yếu được sử dụng cho mục đích phân đoạn màu.

    Tại sao HSV tốt hơn RGB để phát hiện đối tượng?

    R, G, B trong RGB đều liên quan đến độ sáng của màu [cái mà chúng ta thường gọi là cường độ],i. e. , Chúng tôi không thể tách thông tin màu khỏi độ sáng. HSV hoặc Giá trị bão hòa Hue được sử dụng để tách độ sáng của hình ảnh khỏi thông tin màu sắc . Điều này giúp dễ dàng hơn khi chúng ta đang làm việc hoặc cần độ sáng của hình ảnh/khung hình.

    Chủ Đề