Hướng Dẫn Dễ Hiểu Về Thao Tác Hình ảnh Trong Python Với OpenCV

Cho dù bạn muốn xây dựng một mô hình học sâu phức tạp cho một chiếc xe tự lái, một chương trình nhận dạng khuôn mặt trực tiếp hay tạo phần mềm xử lý hình ảnh cho dự án tốt nghiệp của mình, bạn sẽ phải học OpenCV trong suốt quá trình.

OpenCV là một thư viện xử lý hình ảnh và video khổng lồ được thiết kế để hoạt động với nhiều ngôn ngữ như python, C / C ++, Java, v.v. Nó là nền tảng cho nhiều ứng dụng bạn biết về xử lý hình ảnh.

Bắt đầu với OpenCV có thể là một thử thách, chủ yếu nếu bạn dựa vào tài liệu chính thức của nó, vốn được biết đến là cồng kềnh và khó hiểu.

Hôm nay chúng ta sẽ học cách làm việc với OpenCV và tôi sẽ cố gắng hết sức để giữ cho nó đơn giản.

Cài đặt OpenCV

Bây giờ là lúc cài đặt OpenCV chỉ bằng một lệnh đơn giản:

Nhập một hình ảnh đơn giản

Điều đầu tiên bạn cần học là nhập một hình ảnh đơn giản và hiển thị nó bằng OpenCV.

Mã rất đơn giản:

Sau khi đọc mã, nếu bạn nghĩ rằng chúng tôi đang làm nhiều hơn là chỉ tải hình ảnh, bạn đã đúng. Sau cùng, việc tải một hình ảnh bằng OpenCV sẽ chỉ dẫn đến một dòng mã python:

img = cv2.imread("image.jpg")

Vậy, những gì còn lại? Chà… điều đầu tiên chúng ta phải làm là nhập thư viện. Chỉ sau đó chúng ta có thể đọc hình ảnh bằng cách sử dụngimreadvà chuyển đường dẫn của hình ảnh làm tham số duy nhất.

Nếu chúng ta dừng chương trình ngay bây giờ, chúng ta sẽ tải hình ảnh nhưng không làm gì với nó, vì vậy thay vào đó, ít nhất hãy trình bày hình ảnh vào một cửa sổ mới để người dùng có thể xem kết quả. Đối với điều đó, chúng tôi sẽ sử dụngcv2.imshowvà chuyển tên cửa sổ và hình ảnh làm đối số.

Cuối cùng, chúng tôi yêu cầu Python không thoát khỏi chương trình cho đến khi chúng tôi nhấn một phím hoặc đóng cửa sổ. Sau đó, chúng tôi dọn dẹp mọi thứ bằng cách phá hủy tất cả các cửa sổ chúng tôi đã mở.

Đang tải video

OpenCV rất tốt trong việc xử lý không chỉ với hình ảnh mà còn với video. Các luồng video có thể được tải từ tệp video hoặc trực tiếp từ nguồn video như webcam.

Trong ví dụ tiếp theo, chúng tôi sẽ tải một video từ webcam và hiển thị nó trên một cửa sổ mới:

Mã này tự giải thích, nhưng chúng ta hãy xem xét nó một cách chi tiết. Chúng tôi sử dụng phương phápVideoCaptuređể tải tài nguyên video. Đối số đầu tiên xác định đầu vào mà chúng ta đang đọc. Vượt qua một0, chúng tôi đang đề cập đến webcam chính (nếu tồn tại). Trong trường hợp bạn có nhiều webcam kết nối, bạn có thể sử dụng1,2, v.v. Nếu video của bạn được quay và lưu trong tệp, bạn có thể chuyển một chuỗi với đường dẫn đến tệp. Tiếp theo, chúng tôi bắt đầu một vòng lặp sẽ chỉ kết thúc trên lệnh của người dùng, nhưng nhiều hơn nữa về sau. Điều quan trọng ở đây là những gì xảy ra bên trong vòng lặp. Điều đầu tiên chúng tôi đang làm là yêu cầuVideoCaptuređể đọc một khung của video. Trong trường hợp của máy ảnh, nó sẽ là ảnh chụp nhanh của máy ảnh tại thời điểm đó, và trong trường hợp tệp video, nó sẽ là khung hình video hiện tại.

Mỗi khung hình chúng ta đọc từ tải video giống như một hình ảnh là rất quan trọng vì điều đó có nghĩa là chúng ta có toàn bộ kho các chức năng của OpenCV theo ý của chúng ta khi xử lý video.

Ví dụ: đầu ra của khung được chụp bằngreadcó thể được chuyển cho phương thứcimshowchính xác như chúng ta đã làm trong ví dụ trước về làm việc với hình ảnh.

Bây giờ video đang phát, nhưng không có cách nào thoát khỏiwhile, vì vậy, hãy xây dựng chiến lược thoát bằng cách phát hiện xemqphím đã được nhấn. Nếu có, thì chúng ta thoát khỏi vòng lặp cho các hoạt động dọn dẹp.

Chúng tôi có một bước bổ sung để dọn dẹp, giải phóng máy ảnh hoặc tệp video vì ngay cả khi chúng tôi không đọc bất kỳ khung hình nào nữa, chúng tôi vẫn có các đối tượng đang mở trong bộ nhớ. Chúng ta có thể làm điều đó bằng cách sử dụng phương phápreleasetừVideoCapturevật.

Thay đổi kích thước hình ảnh

Thay đổi kích thước hình ảnh có rất nhiều ứng dụng, từ việc tối ưu hóa kích thước, thu phóng hoặc thậm chí cung cấp cho mạng nơ-ron để thực hiện một số phép thuật. Nếu bạn muốn thay đổi kích thước hình ảnh, OpenCV sẽ giúp bạn.

Bây giờ chúng ta hãy xem một ví dụ về cách thay đổi kích thước hình ảnh:

Nó khá đơn giản, vì vậy chúng tôi đã thêm một số hương vị vào nó và thay vì chỉ đơn giản là thay đổi kích thước hình ảnh thành một kích thước cụ thể, chúng tôi đang thu nhỏ hình ảnh theo hệ số X (ví dụ là 60%). Lưu ý rằng mã sẽ đơn giản hơn nếu chúng tôi đang nhắm mục tiêu các thứ nguyên cụ thể.

Phương phápresizemong đợi ít nhất hai đối số, hình ảnh được thay đổi kích thước và các kích thước mới (theo x và y dưới dạng một bộ). Theo tùy chọn, chúng ta có thể chuyển đối số thứ ba để xác định nội suy như được mô tả trênthay đổi kích thước tài liệu chức năng.

Chuyển đổi không gian màu

Khi chúng ta đọc một hình ảnh bằng OpenCV, chúng ta nghĩ về màu sắc là các kênh hoặc độ sâu của mảng hình ảnh trong đó mỗi kênh hoặc kích thước tương ứng với một màu. Không gian màu phổ biến nhất và không gian màu bạn có thể đã biết làRGB, bao gồm 3 kênh: đỏ, xanh lá cây và xanh dương. Nhưng các hệ thống khác có thể thể hiện màu sắc trên hình ảnh, nhưLAB,YCrCb,HLSHSV, trong số những người khác. Mỗi người trong số họ với những đặc điểm khác nhau đáng để nghiên cứu và học hỏi.

Một tùy chọn phổ biến hơn để thiết lập màu sắc trên hình ảnh là thang độ xám, trong đó chỉ có một kênh xác định mỗi pixel. Hãy xem một ví dụ về cách chúng ta có thể biến đổi một hình ảnh màu thành một hình ảnh thang độ xám.

Chức năng mà tất cả điều kỳ diệu xảy ra làcvtColor, đòi hỏi hai đối số, hình ảnh và không gian màu, và trả về hình ảnh mới mà không làm thay đổi hình ảnh gốc. May mắn thay, OpenCV đã xác định các giá trị cho mỗi phép biến đổi không gian màu đã biết. Trong trường hợp của chúng tôi, chúng tôi sử dụngCOLOR_BGR2GRAY, biến BGR thành XÁM.

Vậy BGR là gì? Đó là cách mặc định mà OpenCV tải hình ảnh.

Lưu hình ảnh

Chúng tôi thường cần lưu kết quả hình ảnh sau khi xử lý, có thể sau khi thay đổi không gian màu của nó, thực hiện chuyển đổi hình ảnh hoặc bất kỳ thao tác nào chúng tôi thực hiện trên hình ảnh đó.

Đoạn mã sau chỉ cho bạn cách lưu hình ảnh sau khi thay đổi màu sắc của nó thành thang độ xám:

Bạn có thể thấy rằng chúng tôi đã sử dụng một hàm có tên làimwritechịu trách nhiệm lưu hình ảnh màu xám trong máy tính của chúng tôi sau khi chỉ định đường dẫn cho hình ảnh mới được lưu. Hình ảnh thực tế mà chúng ta cần lưu là biến màu xám trong trường hợp này.

Làm mịn hình ảnh

OpenCV cung cấp các công cụ để làm mịn hình ảnh và giúp giảm nhiễu trong đó. Quá trình này hoàn toàn tự động, và tất cả sự phức tạp về cách thức hoạt động của nó được gói gọn cho chúng ta trong một hàm duy nhất, đơn giản để sử dụng.

Làm mịn hình ảnh nhằm cải thiện chất lượng của nó, mặc dù không hoàn hảo, trong một số trường hợp, nó có thể là một thay đổi đáng kể và là chìa khóa để sử dụng hình ảnh trong các quy trình tiếp theo.

Đây là một ví dụ về cách làm mịn hình ảnh:

Hình ảnh trông đẹp hơn nhiều, nhưng nó hoạt động như thế nào? Thông qua phương phápblurtrên thư viện OpenCV, thư viện mong đợi hình ảnh và kích thước hạt nhân làm đối số. Kích thước hạt nhân là một bộ để phản ánh trục x và y. Lưu ý rằng các giá trị khác nhau của x và y sẽ dẫn đến kết quả đầu ra khác nhau, vì vậy bạn sẽ phải xử lý các giá trị đó cho hình ảnh của mình.

Kích thước hạt nhân hoạt động bằng cách lấy một vùng pixel nhỏ (trong trường hợp của chúng tôi là 5 × 5), lấy giá trị trung bình của các pixel đó và thay thế kích thước thực (pixel) để có được hình ảnh ít nhiễu mới.

Có nhiều cách khác để làm mịn hình ảnh, chẳng hạn nhưgaussianBlurhoặc làmedianBlurhoạt động tương tự.

Vẽ trên hình ảnh

Cho đến nay, chúng tôi đã chơi với những hình ảnh mà không thêm bất cứ điều gì mới vào chúng. Đã đến lúc chúng ta thay đổi điều đó. OpenCV cho phép chúng tôi không chỉ thực hiện các phép biến đổi và hiệu ứng cho hình ảnh mà còn thay đổi chúng hoặc vẽ trên chúng.

Ví dụ: vẽ trên hình ảnh có thể hữu ích nếu bạn đang cố gắng tạo một chương trình theo dõi đối tượng hoặc chương trình nhận dạng khuôn mặt mà bạn muốn vẽ một hình vuông hoặc hình dạng để làm nổi bật các đối tượng được xác định.

Hãy vẽ một vài hình dạng hình học trên hình ảnh để cho thấy nó hoạt động như thế nào.

Vẽ một đường

Chúng tôi sẽ cố gắng vẽ một đường thẳng trên hình ảnh bằng cách sử dụnglinechức năng:

Cáclinehàm mong đợi hình ảnh và bốn đối số khác: đầu dòng trong (x1, y1), cuối dòng trong (x2, y2), màu của đường (tính bằng BGR cho hình ảnh của chúng ta) và độ dày của nó tính bằng pixel.

Vẽ hình chữ nhật

Tôi nghĩ hình chữ nhật là hình dạng được sử dụng nhiều nhất, ít nhất là trong thế giới AI, vì chúng thường được sử dụng để theo dõi các đối tượng như khuôn mặt, ô tô hoặc biển báo giao thông trên hình ảnh. Chúng cũng rất dễ sử dụng. Đây là một ví dụ:

Cácrectanglechức năng rất giống vớilinechức năng. Nó mong đợi hình ảnh và bốn đối số khác: góc trên cùng bên trái của hình chữ nhật ở (x1, y1), góc dưới bên phải của nó trong (x2, y2), màu của đường (trong BGR cho hình ảnh của chúng ta), và độ dày tính bằng pixel. ###. Vẽ một vòng tròn Điều cuối cùng chúng ta sẽ vẽ là một vòng tròn nhỏ trên hình ảnh đôi khi hữu ích khi bạn đang theo dõi một đối tượng hình tròn như một quả bóng.

Một lần nữa tất cả các chức năng này khá giống nhau. Để hiển thị một vòng tròn trên một hình ảnh, chúng tôi sử dụngcirclehàm mong đợi hình ảnh và bốn đối số khác: điểm trung tâm của hình tròn tính bằng (x, y), bán kính tính bằng pixel, màu sắc của nó và độ dày của đường kẻ.

Phần kết luận

OpenCV là một thư viện thú vị và mạnh mẽ để xử lý hình ảnh và video. Phạm vi sử dụng rộng rãi của nó là từ một thư viện trợ giúp đơn giản để thực hiện các thao tác hình ảnh để triển khai các thuật toán thị giác máy tính hiện đại.

Hôm nay chúng tôi chỉ đề cập đến một tỷ lệ nhỏ những gì mà thư viện này có thể làm được. Nếu bạn thích bài đọc này, tôi khuyên bạn nên xem bài viết của tôi trêncác chức năng cần thiết của OpenCV, điều này sẽ mở rộng kiến ​​thức của bạn về thư viện nhiều hơn một chút.

Thị giác máy tính là một chủ đề thu hút tôi và tôi sẽ viết nhiều hơn về OpenCV trong tương lai, vì vậy hãy chú ý theo dõi.

Điều này bài báo ban đầu được xuất bản trên Phát trực tiếp mã bởi Juan Cruz Martinez (twitter: @bajcmartinez), người sáng lập và nhà xuất bản của Live Code Stream, doanh nhân, nhà phát triển, tác giả, diễn giả và người thực hiện nhiều thứ.

Phát trực tiếp mã cũng có sẵn như một bản tin hàng tuần miễn phí. Đăng ký để cập nhật mọi thứ liên quan đến lập trình, AI và khoa học máy tính nói chung.

Từ khóa » Cv2.resize Là Gì