Cv2 Trăn
OpenCV là một thư viện Python cho phép bạn thực hiện các tác vụ xử lý ảnh và thị giác máy tính. Nó cung cấp một loạt các tính năng, bao gồm phát hiện đối tượng, nhận dạng khuôn mặt và theo dõi. Trong Hướng dẫn OpenCV bằng Python này, chúng ta sẽ tìm hiểu thêm về thư viện Show
OpenCV là gì?OpenCV là một thư viện phần mềm mã nguồn mở dành cho thị giác máy tính và máy học. Dạng đầy đủ của OpenCV là Open Source Computer Vision Library. Nó được tạo ra để cung cấp cơ sở hạ tầng dùng chung cho các ứng dụng dành cho thị giác máy tính và tăng tốc độ sử dụng nhận thức của máy trong các sản phẩm tiêu dùng. OpenCV, với tư cách là một phần mềm được BSD cấp phép, giúp các công ty sử dụng và thay đổi mã một cách đơn giản. Có một số gói và thư viện được xác định trước giúp cuộc sống của chúng ta trở nên đơn giản và OpenCV là một trong số đó Gary Bradsky đã phát minh ra OpenCV vào năm 1999 và ngay sau đó là bản phát hành đầu tiên vào năm 2000. Thư viện này dựa trên C/C++ được tối ưu hóa và hỗ trợ Java và Python cùng với C++ thông qua một giao diện. Thư viện có hơn 2500 thuật toán được tối ưu hóa, bao gồm một bộ sưu tập phong phú các thuật toán học máy và thị giác máy tính, cả cổ điển và hiện đại. Khi sử dụng OpenCV, bạn có thể dễ dàng thực hiện các tác vụ phức tạp như nhận dạng và nhận dạng khuôn mặt, xác định đối tượng, phân loại hành động của con người trong video, theo dõi chuyển động của camera, theo dõi đối tượng chuyển động, trích xuất mô hình đối tượng 3D, tạo đám mây điểm 3D từ camera âm thanh nổi, ghép các hình ảnh lại với nhau để Python là ngôn ngữ thân thiện với người dùng và dễ làm việc nhưng ưu điểm này đi kèm với tốc độ, vì Python chậm hơn so với các ngôn ngữ như C hoặc C++. Vì vậy, chúng tôi mở rộng Python bằng C/C++, cho phép chúng tôi viết mã chuyên sâu về tính toán trong C/C++ và tạo trình bao bọc Python có thể được sử dụng làm mô-đun Python. Làm điều này, mã sẽ nhanh, vì nó được viết bằng mã C/C++ gốc (vì đó là mã C++ thực tế hoạt động ở chế độ nền) và đồng thời, viết mã bằng Python dễ hơn C/C++. OpenCV-Python là trình bao bọc Python để triển khai OpenCV C++ ban đầu Bắt đầu nào Thị giác máy tính là gì?Thuật ngữ Thị giác máy tính (CV) được sử dụng và nghe rất thường xuyên trong các ứng dụng trí tuệ nhân tạo (AI) và học sâu (DL). Về cơ bản, thuật ngữ này có nghĩa là cung cấp cho máy tính khả năng nhìn thế giới như con người chúng ta. Thị giác máy tính là một lĩnh vực nghiên cứu cho phép máy tính tái tạo hệ thống thị giác của con người. Như đã đề cập ở trên, Đó là một tập hợp con của trí tuệ nhân tạo thu thập thông tin từ hình ảnh hoặc video kỹ thuật số và xử lý chúng để xác định các thuộc tính. Toàn bộ quá trình bao gồm thu thập hình ảnh, sàng lọc, phân tích, xác định và trích xuất thông tin. Quá trình xử lý mở rộng này giúp máy tính hiểu bất kỳ nội dung hình ảnh nào và hành động theo nội dung đó. Các dự án thị giác máy tính dịch nội dung hình ảnh kỹ thuật số thành các mô tả rõ ràng để thu thập dữ liệu đa chiều. Dữ liệu này sau đó được chuyển thành ngôn ngữ máy tính có thể đọc được để hỗ trợ quá trình ra quyết định. Mục tiêu chính của nhánh trí tuệ nhân tạo này là dạy máy móc thu thập thông tin từ pixel. Làm thế nào để một máy tính đọc một hình ảnh?Làm thế nào để một tâm trí con người nắm bắt một hình ảnh? Bạn rất có thể sẽ tìm kiếm các hình dạng và màu sắc khác nhau trong Hình ảnh và điều đó có thể giúp bạn quyết định rằng đây là hình ảnh của một chú chó. Nhưng liệu một chiếc máy tính cũng nhìn thấy nó theo cách tương tự? Hình ảnh kỹ thuật số là hình ảnh bao gồm các phần tử hình ảnh, còn được gọi là pixel, mỗi phần tử có số lượng biểu diễn số hữu hạn, riêng biệt cho cường độ hoặc mức xám của nó. Vì vậy, máy tính xem một hình ảnh dưới dạng các giá trị số của các pixel này và để nhận dạng một hình ảnh nhất định, nó phải nhận ra các mẫu và quy luật trong dữ liệu số này Dưới đây là một ví dụ giả thuyết về cách các pixel tạo thành một hình ảnh. Các pixel tối hơn được biểu thị bằng một số gần bằng 0 và các pixel sáng hơn được biểu thị bằng các số tiến gần đến một. Tất cả các màu khác được thể hiện bằng các số từ 0 đến 1. Nhưng thông thường, bạn sẽ thấy rằng đối với bất kỳ hình ảnh màu nào cũng có 3 kênh chính – Red, green và blue và giá trị của mỗi kênh thay đổi từ 0-255. Nói một cách đơn giản hơn, chúng ta có thể nói rằng một hình ảnh kỹ thuật số thực sự được hình thành bởi sự kết hợp của ba kênh màu cơ bản Đỏ, lục và lam trong khi đối với hình ảnh thang độ xám, chúng ta chỉ có một kênh có giá trị cũng thay đổi từ 0-255 cài đặt OpenCVCó nhiều cách để bạn có thể cài đặt OpenCV trên máy tính của mình. Đây là một số Cài đặt bằng AnacondaAnaconda là một bản phân phối nguồn mở và miễn phí có điều kiện của ngôn ngữ lập trình Python và R dành cho điện toán khoa học, nhằm mục đích đơn giản hóa việc quản lý và triển khai gói. Bạn có thể tải xuống từ đây và cài đặt nó Sau khi cài đặt thành công anaconda, chỉ cần truy cập dấu nhắc anaconda và sử dụng lệnh này để cài đặt OpenCV conda install -c conda-forge opencv Sau khi lệnh này được thực hiện thành công, OpenCV sẽ có sẵn trên máy tính của bạn. Bây giờ chúng ta hãy xem một số cách khác để cài đặt OpenCV Cho cửa sổBạn có thể sử dụng pip để cài đặt OpenCV trên windows. Pip là một hệ thống quản lý gói tiêu chuẩn thực tế được sử dụng để cài đặt và quản lý các gói phần mềm được viết bằng Python và nó thường được cài đặt khi bạn cài đặt Python. Nếu bạn chưa cài đặt Python, tôi khuyên bạn nên tải xuống từ đây. Sử dụng lệnh này trong dấu nhắc lệnh để cài đặt OpenCV pip install opencv-python Sau khi cài xong kiểm tra xem đã cài thành công chưa. Để làm điều đó, chỉ cần vào dấu nhắc lệnh và gõ 'python' và nhấn enter. Bạn sẽ thấy một số tin nhắn như thế này Nếu đây không phải là thông báo bạn thấy, tôi khuyên bạn nên cài đặt lại python vào hệ thống của mình. Tiếp theo gõ import cv2 nếu không báo lỗi là cài đặt thành công dành cho máy MacBạn có thể sử dụng homebrew để cài đặt OpenCV vì nó thực sự dễ dàng và bạn chỉ cần sử dụng lệnh này để cài đặt brew install opencv Bây giờ bạn đã cài đặt OpenCV vào hệ thống của mình, hãy xem nó hoạt động như thế nào Đọc & Lưu hình ảnhBây giờ để OpenCV hoạt động trên bất kỳ hình ảnh nào, nó phải đọc được hình ảnh đó. Ở đây chúng ta sẽ xem cách đọc và lưu tệp sau khi hoàn thành. Hãy xem cách thực hiện Chức năng imread trong OpenCVChúng tôi sử dụng chức năng imread để đọc hình ảnh. Đây là cú pháp của chức năng này cv2.imread(path, flag) Tham số đường dẫn nhận một chuỗi đại diện cho đường dẫn của hình ảnh sẽ được đọc. Tệp phải nằm trong thư mục làm việc hoặc chúng tôi phải cung cấp đường dẫn đầy đủ tới hình ảnh. Tham số khác là cờ được sử dụng để chỉ định cách đọc hình ảnh của chúng ta. Dưới đây là các giá trị có thể có và hoạt động của chúng cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.____5 cv2.IMREAD_UNCHANGED: It specifies to load an image as such including alpha channel.Alternatively, we can pass integer value -1 for this flag. Thông thường, phương thức imread() trả về một hình ảnh được tải từ tệp đã chỉ định nhưng trong trường hợp không thể đọc được hình ảnh do định dạng tệp không được hỗ trợ, tệp bị thiếu, định dạng không được hỗ trợ hoặc không hợp lệ, nó chỉ trả về một ma trận. Đây là một ví dụ trong đó chúng tôi đọc một hình ảnh từ bộ lưu trữ của tôi
Hàm imwrite trong OpenCVChúng ta có thể sử dụng chức năng imwrite() của OpenCV để lưu hình ảnh trong thiết bị lưu trữ và phần mở rộng tệp xác định định dạng hình ảnh như trong ví dụ bên dưới. Cú pháp như sau ________số 8 Thông số tên tập tin. Một chuỗi đại diện cho tên tệp. Tên tệp phải bao gồm định dạng hình ảnh hình ảnh. Đó là hình ảnh được lưu lại Đây là một ví dụ trong đó chúng tôi sử dụng chức năng này
Nếu tệp được ghi thành công thì hàm này trả về True và do đó, điều quan trọng là lưu trữ kết quả của hàm này. Trong ví dụ trên, chúng tôi đã làm tương tự và sử dụng biến 'trạng thái' để biết liệu tệp có được ghi thành công hay không Thao tác cơ bản Trên hình ảnhTrong phần này, chúng ta sẽ thảo luận về một số thao tác cơ bản mà chúng ta có thể thực hiện trên hình ảnh sau khi đọc thành công chúng. Các thao tác chúng ta sẽ làm đây ae
Truy cập các giá trị pixel và sửa đổi chúngVì vậy, về cơ bản có hai cách để truy cập giá trị pixel trong Hình ảnh và sửa đổi chúng. Trước tiên, hãy xem cách chúng tôi có thể truy cập một giá trị pixel cụ thể của hình ảnh pip install opencv-python0 đầu ra [157 166 200] Bây giờ như bạn có thể thấy, chúng tôi có một danh sách chứa 3 giá trị. Như chúng ta đã biết OpenCV lưu trữ hình ảnh màu dưới dạng hình ảnh màu BGR, vì vậy giá trị đầu tiên trong danh sách là giá trị của kênh màu xanh lam của pixel cụ thể này và phần còn lại là giá trị cho các kênh màu xanh lục và đỏ Chúng tôi cũng chỉ có thể truy cập một trong các kênh như hình bên dưới pip install opencv-python1 đầu ra 157 Để sửa đổi các giá trị chúng ta chỉ cần truy cập vào pixel sau đó ghi đè lên nó bằng một giá trị như hình bên dưới pip install opencv-python2 đầu ra [255 255 255] Phương pháp này để truy cập và sửa đổi các giá trị pixel chậm, vì vậy bạn nên sử dụng thư viện NumPy vì nó được tối ưu hóa để tính toán mảng nhanh. Để truy cập các giá trị pixel riêng lẻ, các phương thức mảng Numpy, mảng. item() và mảng. itemset() được coi là tốt hơn vì chúng luôn trả về một số vô hướng. Tuy nhiên, nếu bạn muốn truy cập tất cả các giá trị B,G,R, bạn sẽ cần gọi mảng. item() riêng cho từng giá trị như hình bên dưới pip install opencv-python3 Truy cập Thuộc tính hình ảnhChúng ta có ý nghĩa gì bởi các thuộc tính hình ảnh ở đây? . Chúng ta có thể truy cập ba phần sau bằng cách sử dụng phương thức shape() như bên dưới pip install opencv-python4 Vì vậy, ở đây chúng tôi có ba số trong bộ dữ liệu được trả về, đây là số hàng, số cột và số kênh tương ứng. Trong trường hợp một hình ảnh có thang độ xám, bộ dữ liệu được trả về chỉ chứa số lượng hàng và cột Thường thì một số lượng lớn lỗi trong mã OpenCV-Python là do kiểu dữ liệu không hợp lệ nên img. dtype trả về kiểu dữ liệu hình ảnh là rất quan trọng trong khi gỡ lỗi Đây là một ví dụ pip install opencv-python5 ROI hình ảnh (Khu vực quan tâm) Thường thì bạn có thể bắt gặp một số hình ảnh mà bạn chỉ quan tâm đến một khu vực cụ thể. Giả sử bạn muốn phát hiện mắt trong một hình ảnh, bạn sẽ tìm kiếm toàn bộ hình ảnh, có thể không vì điều đó có thể không lấy được kết quả chính xác. Nhưng chúng tôi biết rằng mắt là một phần của khuôn mặt, vì vậy tốt hơn hết là phát hiện khuôn mặt trước, do đó, ở đây khuôn mặt là ROI của chúng tôi. Bạn có thể muốn xem bài viết Nhận diện khuôn mặt bằng thuật toán Viola-Jones, trong đó chúng tôi phát hiện khuôn mặt và sau đó tìm mắt trong khu vực chúng tôi tìm thấy khuôn mặt Tách và hợp nhất các kênh hình ảnhChúng tôi cũng có thể tách các kênh từ một hình ảnh và sau đó làm việc trên từng kênh riêng biệt. Hoặc đôi khi bạn có thể cần hợp nhất chúng lại với nhau, đây là cách chúng tôi thực hiện Nhưng phương pháp này rất chậm, vì vậy chúng ta cũng có thể sử dụng Numpy để làm điều tương tự, đây là cách thực hiện pip install opencv-python6 Bây giờ, giả sử bạn chỉ muốn đặt tất cả các giá trị trong kênh màu đỏ thành 0, đây là cách thực hiện điều đó pip install opencv-python7 OpenCV Thay đổi kích thước hình ảnhThông thường khi làm việc với ảnh chúng ta thường có nhu cầu resize ảnh theo yêu cầu nhất định. Chủ yếu bạn sẽ thực hiện thao tác như vậy trong Machine learning và deep learning vì nó giúp giảm thời gian đào tạo mạng nơ-ron. Khi số lượng pixel trong một hình ảnh tăng lên, số lượng nút đầu vào càng nhiều, từ đó làm tăng độ phức tạp của mô hình. Chúng tôi sử dụng phương thức resize() sẵn có để thay đổi kích thước hình ảnh cú pháp pip install opencv-python8 Thông số s – hình ảnh đầu vào (bắt buộc) kích thước – kích thước mong muốn cho hình ảnh đầu ra sau khi thay đổi kích thước (bắt buộc) fx – Hệ số tỷ lệ dọc theo trục hoành. (không bắt buộc) fy – Hệ số tỷ lệ dọc theo trục tung Nội suy (tùy chọn) – Cờ này sử dụng các phương thức sau Nội suy (tùy chọn) – Cờ này sử dụng các phương thức sau. Dưới đây là một ví dụ về cách chúng ta có thể sử dụng phương pháp này pip install opencv-python9 đầu ra gốcđã thay đổi kích thướcXoay hình ảnh OpenCVChúng tôi có thể cần xoay hình ảnh trong một số trường hợp và chúng tôi có thể thực hiện dễ dàng bằng cách sử dụng OpenCV. Chúng tôi sử dụng cv2. rotate() để xoay một mảng 2D theo bội số của 90 độ. Đây là cú pháp brew install opencv0 Thông số. Dưới đây là một ví dụ sử dụng chức năng này brew install opencv1 đầu ra hình ảnh xoayBây giờ chúng ta muốn xoay ảnh theo một góc nào đó thì làm thế nào. Chúng ta có thể sử dụng một phương pháp khác cho điều đó. Trước tiên, hãy tính toán ma trận affine thực hiện phép biến đổi affine (ánh xạ tuyến tính của pixel) bằng cách sử dụng phương thức getRotationMatrix2D, tiếp theo chúng ta làm cong hình ảnh đầu vào bằng ma trận affine bằng phương thức warpAffine Đây là cú pháp của các chức năng này brew install opencv2 trung tâm. trung tâm của hình ảnh (điểm phải xảy ra xoay) Đây là một ví dụ trong đó chúng tôi xoay một hình ảnh theo nhiều góc độ khác nhau brew install opencv3 đầu ra hình ảnh xoayChức năng vẽ OpenCVChúng ta có thể yêu cầu vẽ một số hình nhất định trên một hình ảnh như hình tròn, hình chữ nhật, hình elip, hình đa giác, hình lồi, v.v. và chúng ta có thể dễ dàng làm điều này bằng OpenCV. Nó thường được sử dụng khi chúng ta muốn làm nổi bật bất kỳ đối tượng nào trong hình ảnh đầu vào, ví dụ trong trường hợp nhận diện khuôn mặt, chúng ta có thể muốn làm nổi bật khuôn mặt bằng một hình chữ nhật. Ở đây chúng ta sẽ tìm hiểu về các chức năng vẽ như hình tròn, hình chữ nhật, đường thẳng, đường đa giác và cũng xem cách viết văn bản trên hình ảnh Vẽ hình trònChúng tôi sử dụng phương pháp khoanh tròn để vẽ một vòng tròn trong một hình ảnh. Đây là cú pháp và tham số brew install opencv4 Thông số. Dưới đây là một vài trong số các ví dụ brew install opencv5 Vẽ hình chữ nhật Trong một tương tự, chúng ta có thể vẽ một hình chữ nhật. Đây là cú pháp cho chức năng này brew install opencv6 Thông số hình ảnh. Nó là hình ảnh đầu vào mà hình chữ nhật sẽ được vẽ. Giá trị trả về. Nó trả về một hình ảnh Dưới đây là một ví dụ về chức năng này brew install opencv7 vẽ đường Đây là cú pháp của phương thức line mà chúng ta có thể tạo các đường trên một hình ảnh brew install opencv8 Thông số. Giá trị trả về. Nó trả về một hình ảnh Đây là một ví dụ brew install opencv9 Vẽ Polylines Chúng ta có thể vẽ các polylines bằng phương thức polylines() trên hình ảnh. Và chúng có thể được sử dụng để vẽ các đường cong đa giác trên hình ảnh. Cú pháp được đưa ra dưới đây cv2.imread(path, flag)0 Thông số img – Nó đại diện cho một hình ảnh. Đây là một ví dụ brew install opencv9 Viết văn bản trên một hình ảnh Chúng ta có thể viết chữ lên ảnh bằng cách sử dụng phương thức putText(). Cú pháp được đưa ra dưới đây cv2.imread(path, flag)2 Thông số. Đây là một ví dụ cv2.imread(path, flag)3 Phát hiện đốm màu OpenCVBlob là viết tắt của Đối tượng lớn nhị phân trong đó thuật ngữ "Lớn" tập trung vào đối tượng có kích thước cụ thể và các đối tượng nhị phân "nhỏ" khác thường được coi là nhiễu Nói một cách đơn giản hơn, Blob là một nhóm các pixel được kết nối mà chúng ta có thể tìm thấy trong một hình ảnh và tất cả các pixel này đều có một số thuộc tính chung. Trong hình ảnh bên dưới, các vùng được kết nối có màu là các đốm màu và mục tiêu của phát hiện đốm màu là xác định và đánh dấu các vùng này (được đánh dấu bằng vòng tròn màu đỏ) Khi sử dụng phương pháp SimpleBlobDetector của OpenCV, chúng ta có thể dễ dàng tìm thấy các đốm màu trong hình ảnh của mình. Nhưng phương pháp này hoạt động như thế nào? Hãy để chúng tôi xem chi tiết điều này
Lớp này có thể thực hiện một số quá trình lọc các đốm màu được trả về bằng cách đặt filterBy* thành True để bật quá trình lọc tương ứng. Các bộ lọc có sẵn như sau
Theo mặc định, giá trị của các thông số này được điều chỉnh để trích xuất các đốm tròn tối Đây là một ví dụ về cách sử dụng SimpleBlobDetector() đơn giản cv2.imread(path, flag)4 Bây giờ đây là một ví dụ trong đó chúng tôi sử dụng các bộ lọc được đề cập ở trên cv2.imread(path, flag)5 Phát hiện cạnh CannyPhát hiện cạnh là một kỹ thuật xử lý ảnh được sử dụng để tìm ranh giới của các đối tượng trong ảnh. Ở đây chúng tôi sẽ sử dụng thuật toán phát hiện cạnh phổ biến Canny Edge Detection, được phát triển bởi John F. Khôn ngoan. Trong OpenCV, chúng ta có phương thức Canny() để thực hiện thuật toán này. Đây là cú pháp cv2.imread(path, flag)6 Thông số - img. hình ảnh đầu vào có các cạnh mà chúng tôi muốn phát hiện. Như chúng ta có thể thấy, chúng ta có hai giá trị ngưỡng, minVal và maxVal. Bất kỳ cạnh nào có gradient cường độ lớn hơn maxVal chắc chắn là các cạnh. Ngoài ra, những cạnh có độ dốc cường độ nhỏ hơn minVal chắc chắn không phải là cạnh và bị loại bỏ. Các cạnh nằm giữa hai ngưỡng này được phân loại là các cạnh hoặc không phải cạnh dựa trên khả năng kết nối của chúng với 'các cạnh chắc chắn'. Nếu chúng được kết nối với các pixel “cạnh chắc chắn”, thì chúng được coi là một phần của các cạnh. Mặt khác, chúng cũng bị loại bỏ dưới dạng không cạnh Đây là một ví dụ cv2.imread(path, flag)7 Giờ đây, chúng tôi cũng có thể thực hiện việc này trong thời gian thực, đây là cách thực hiện. cv2.imread(path, flag)8 Làm mịn hình ảnh OpenCVLàm mịn ảnh là một kỹ thuật xử lý ảnh được sử dụng để loại bỏ nhiễu trong ảnh. Làm mờ (làm mịn) loại bỏ các cạnh có cường độ thấp và cũng có lợi trong việc ẩn các chi tiết; . OpenCV chủ yếu cung cấp các loại kỹ thuật làm mờ sau Dưới đây là một số phương pháp mà chúng ta sẽ sử dụng để làm mịn hình ảnh
trung bình OpenCVTrong kỹ thuật này, chúng tôi chuẩn hóa hình ảnh bằng bộ lọc hộp. Nó tính toán giá trị trung bình của tất cả các pixel nằm dưới vùng nhân (bộ lọc hộp) và thay thế giá trị của pixel ở giữa bộ lọc hộp bằng giá trị trung bình được tính toán. OpenCV cung cấp cv2. blur() để thực hiện thao tác này. Cú pháp của cv2. hàm blur() như sau cv2.imread(path, flag)9 Thông số src. Đó là hình ảnh cần được làm mờ. Đây là một ví dụ cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.0 Mờ trung vị OpenCVTrong kỹ thuật này, giá trị trung bình của tất cả các pixel bên dưới cửa sổ nhân được tính toán và pixel trung tâm được thay thế bằng giá trị trung bình này. Nó có một lợi thế so với bộ lọc Gaussian và hộp, đó là giá trị được lọc cho phần tử trung tâm luôn được thay thế bằng một số giá trị pixel trong ảnh, đây không phải là trường hợp của bộ lọc Gaussian hoặc hộp. OpenCV cung cấp một hàm medianBlur() có thể được sử dụng để dễ dàng thực hiện kiểu làm mịn này. Đây là cú pháp cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.1 Thông số src- Nó đại diện cho nguồn (hình ảnh đầu vào). Xem xét ví dụ sau cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.2 OpenCV Gaussian BlurTrong kỹ thuật này, một hàm Gaussian (hạt nhân) thay vì bộ lọc hộp để làm mờ hình ảnh. Chiều rộng và chiều cao của kernel cần được chỉ định và chúng phải là số dương và số lẻ. Chúng tôi cũng phải chỉ định độ lệch chuẩn theo hướng X và Y và được biểu thị bằng sigmaX và sigmaY tương ứng. Nếu cả sigmaX và sigmaY được cho là số không, thì chúng được tính từ kích thước hạt nhân và nếu chúng tôi chỉ chỉ định sigmaX, thì sigmaY được đặt thành cùng một giá trị. Làm mờ Gaussian có hiệu quả cao khi loại bỏ nhiễu Gaussian khỏi hình ảnh. Trong OpenCV chúng ta có hàm GaussianBlur() để thực hiện kỹ thuật này một cách dễ dàng. Đây là cú pháp cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.3 Thông số src − Hình ảnh đầu vào cần làm mờ Đây là một ví dụ cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.4 Bộ lọc song phương OpenCVPhương pháp loại bỏ tiếng ồn này có hiệu quả cao nhưng chậm hơn so với các bộ lọc khác. Bộ lọc Gaussian cũng làm mờ các cạnh và đó không phải là điều chúng tôi muốn, nhưng bộ lọc này đảm bảo rằng chỉ những pixel có cường độ tương tự với pixel trung tâm mới được xem xét để làm mờ, do đó bảo toàn các cạnh vì các pixel ở các cạnh sẽ có sự thay đổi cường độ lớn. Trong OpenCV, chúng tôi có cv. song phươngFilter() phương pháp có thể thực hiện bộ lọc này. Đây là cú pháp cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.5 Thông số. Đây là một ví dụ cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.6 Ngưỡng hình ảnh OpenCVNgưỡng là một kỹ thuật phân đoạn phổ biến, được sử dụng để tách một đối tượng được coi là tiền cảnh khỏi nền của nó. Trong kỹ thuật này, chúng tôi chỉ định các giá trị pixel liên quan đến giá trị ngưỡng được cung cấp. Kỹ thuật tạo ngưỡng này được thực hiện trên ảnh thang độ xám, vì vậy ban đầu, ảnh phải được chuyển đổi trong không gian màu thang độ xám. Ở đây chúng ta sẽ thảo luận về hai cách tiếp cận khác nhau được thực hiện khi thực hiện phân ngưỡng trên một hình ảnh
Ngưỡng đơn giảnTrong kỹ thuật Ngưỡng cơ bản này, đối với mọi pixel, cùng một giá trị ngưỡng được áp dụng. Nếu giá trị pixel nhỏ hơn ngưỡng, nó được đặt thành một giá trị nhất định (thường là 0), nếu không, nó được đặt thành giá trị khác (thường là giá trị tối đa). Có nhiều biến thể khác nhau của kỹ thuật này như hình dưới đây Trong OpenCV, chúng tôi sử dụng cv2. chức năng ngưỡng để thực hiện nó. Đây là cú pháp cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.7 Thông số -> nguồn. Mảng hình ảnh đầu vào (phải ở thang độ xám). cv2. THRESH_BINARY. Nếu cường độ pixel lớn hơn ngưỡng, thì giá trị pixel được đặt thành 255 (màu trắng), nếu không, giá trị này được đặt thành 0 (màu đen). Đây là một ví dụ cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.8 Ngưỡng thích ứng.Trong ngưỡng đơn giản, giá trị ngưỡng là toàn cầu, có nghĩa là nó giống nhau đối với tất cả các pixel trong ảnh. Nhưng đây có thể không phải là cách tiếp cận tốt nhất để tạo ngưỡng vì các phần hình ảnh khác nhau có thể có ánh sáng khác nhau. Do đó, chúng ta cần Ngưỡng thích ứng, là phương pháp mà giá trị ngưỡng được tính cho các vùng nhỏ hơn và do đó, sẽ có các giá trị ngưỡng khác nhau cho các vùng khác nhau. Trong OpenCV, chúng ta có hàm AdaptiveThreshold() để triển khai loại ngưỡng này. Đây là cú pháp của chức năng này cv2.IMREAD_COLOR: It specifies to convert the image to the 3 channel BGR colour image. Any transparency of image will be neglected. It is the default flag. Alternatively, we can passinteger value 1 for this flag.9 Phương thức này chấp nhận các tham số sau - src − Một đối tượng của lớp Mat đại diện cho hình ảnh nguồn (đầu vào). thresholdType − Một biến kiểu số nguyên đại diện cho loại ngưỡng được sử dụng. Đây là một ví dụ cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.0 Đường viền OpenCVVậy đường nét là gì? . Vì vậy, các bộ đếm rất hữu ích đặc biệt khi chúng ta muốn tìm ra hình dạng của một số đối tượng hoặc trong trường hợp phát hiện và nhận dạng đối tượng. Tìm đường viền cũng giống như tìm đối tượng màu trắng từ nền đen, vì vậy hãy nhớ rằng đối tượng cần tìm phải có màu trắng và nền phải có màu đen. Vì vậy, để có độ chính xác cao hơn, chúng ta nên sử dụng ảnh nhị phân và trước khi tìm đường viền, hãy áp dụng ngưỡng như chúng ta đã thảo luận trong phần trước. cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.1 Hàm này trả về ba đối tượng Img. Hình ảnh đầu vào mà chúng ta phải tìm đường viền chế độ. Chế độ truy xuất đường viền, hãy xem phương thức RetrievalModes Đây là cú pháp của drawCounter() cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.2 Thông số Hình ảnh. hình ảnh đầu vào. Dưới đây là một ví dụ sử dụng các chức năng này cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.3 Sự kiện chuột OpenCVOpenCV cũng cung cấp chức năng kiểm soát và quản lý các loại sự kiện chuột khác nhau và cho phép chúng tôi linh hoạt quản lý chúng. Như chúng ta biết, có thể có nhiều loại sự kiện chuột khác nhau như double_click, left button click, right button click, v.v. Để quản lý các sự kiện này, chúng ta cần thiết kế các chức năng gọi lại cho từng sự kiện nhấp chuột này trong khi cửa sổ hoặc khung được mở bởi OpenCV. Chức năng gọi lại cho phép chúng tôi linh hoạt triển khai loại chức năng bạn muốn với một sự kiện nhấp chuột cụ thể Chuột như một cây cọ sơnSử dụng OpenCV, chúng tôi có tùy chọn sử dụng chuột làm cọ vẽ hoặc công cụ vẽ. Bất cứ khi nào bất kỳ sự kiện chuột nào xảy ra trên màn hình cửa sổ, nó sẽ cung cấp cho chúng ta tọa độ (x,y) cho sự kiện chuột cụ thể đó. Bây giờ chúng ta có tọa độ của điểm mà chúng ta quan tâm, chúng ta có thể vẽ bất cứ thứ gì chúng ta muốn, có thể là hình tròn hoặc hình chữ nhật hoặc một đường đơn giản. Trước tiên, hãy cho chúng tôi xem các sự kiện chuột có sẵn, để có danh sách tất cả các sự kiện này, hãy chạy mã bên dưới cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.4 đầu ra ['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_LBUTTON_MBUTTON', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_LBUTTON' Vẽ vòng trònĐể vẽ bất cứ thứ gì trên màn hình cửa sổ, trước tiên chúng ta cần tạo chức năng gọi lại chuột bằng lệnh cv2. hàm setMouseCallback(). Nó có một định dạng cụ thể vẫn giống nhau ở mọi nơi. Chức năng gọi lại chuột của chúng tôi được hỗ trợ bằng cách vẽ một vòng tròn bằng cách nhấp đúp. Đây là mã cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.5 Kết hợp mẫu OpenCVSo khớp mẫu là phương pháp được sử dụng để tìm vị trí của hình ảnh mẫu trong hình ảnh lớn hơn. Trong OpenCV, chúng tôi sử dụng hàm cv. matchTemplate() để khớp mẫu. Nó chỉ đơn giản là trượt hình ảnh mẫu trên hình ảnh đầu vào lớn hơn (như trong tích chập 2D) và so sánh hình ảnh mẫu với phần vá của hình ảnh đầu vào bên dưới hình ảnh mẫu. Nó trả về một hình ảnh thang độ xám, trong đó mỗi pixel biểu thị mức độ lân cận của pixel đó khớp với mẫu. Có một số phương pháp so sánh có thể được thực hiện trong OpenCV. Nếu hình ảnh đầu vào có kích thước (WxH) và hình ảnh mẫu có kích thước (wxh), hình ảnh đầu ra sẽ có kích thước là (W-w+1, H-h+1). Sau khi nhận được kết quả, các kết quả phù hợp nhất có thể được tìm thấy dưới dạng mức tối thiểu toàn cầu (khi TM_SQDIFF được sử dụng) hoặc mức tối đa (khi TM_CCORR hoặc TM_CCOEFF được sử dụng) bằng cách sử dụng hàm minMaxLoc. Lấy nó làm góc trên cùng bên trái của hình chữ nhật và lấy (w,h) làm chiều rộng và chiều cao của hình chữ nhật. Hình chữ nhật đó là vùng mẫu của bạn Đây là cú pháp của cv. matchTemplate() cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.6 Thông số hình ảnh. Hình ảnh nơi tìm kiếm đang chạy. Nó phải là dấu phẩy động 8 bit hoặc 32 bit. Đây là một ví dụ trong đó chúng tôi lấy hình ảnh này làm hình ảnh mẫu cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.7 Khớp mẫu với nhiều đối tượng Trong ví dụ trên, chúng tôi đã tìm kiếm các hình ảnh mẫu chỉ xuất hiện một lần trong hình ảnh. Giả sử một đối tượng cụ thể xuất hiện nhiều lần trong một hình ảnh cụ thể. Trong trường hợp này, chúng tôi sẽ sử dụng ngưỡng là cv2. minMaxLoc() chỉ cung cấp vị trí của một ảnh mẫu và nó sẽ không cung cấp tất cả các vị trí của ảnh mẫu. Xem xét ví dụ sau cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.8 Quay video OpenCVOpenCV cũng có thể được sử dụng để xử lý video. Với OpenCV, chúng tôi có thể quay video từ máy ảnh và nó cũng cho phép chúng tôi tạo một đối tượng quay video rất hữu ích để quay video qua webcam và sau đó bạn có thể thực hiện các thao tác mong muốn trên video đó. Bên cạnh đó, bạn cũng có thể phát và thực hiện thao tác trên tệp video và lưu chúng Quay video từ máy ảnhThông thường, chúng tôi phải quay một luồng trực tiếp bằng máy ảnh. Với giao diện rất đơn giản của OpenCV, chúng ta có thể dễ dàng thực hiện. Đây là một nhiệm vụ đơn giản để bắt đầu. Trong tác vụ này, chúng tôi sẽ quay video từ máy ảnh (webcam tích hợp trong máy tính xách tay của tôi) và hiển thị dưới dạng video thang độ xám Trong OpenCV, chúng ta cần tạo một đối tượng VideoCapture để quay video. Chúng tôi chuyển chỉ mục thiết bị hoặc tên của tệp video làm đối số của nó. Chỉ số thiết bị chỉ là số để chỉ định camera trong trường hợp chúng tôi có sẵn nhiều webcam. Thông thường, một người chỉ có một camera duy nhất được kết nối (như trong trường hợp của tôi), vì vậy chỉ cần chuyển 0. Sau đó, chúng tôi bắt đầu chụp từng khung hình bằng một vòng lặp và xử lý nó theo đó. Cuối cùng, chúng tôi chỉ cần thoát khỏi vòng lặp và giải phóng ảnh chụp cv2.IMREAD_GRAYSCALE: It specifies to convert an image to thesingle channel grayscale image. Alternatively, we can pass integer value 0 for this flag.9 chiếm lấy. read() trả về một bool (True/False) và khung mà webcam hiện đang đọc. Nếu khung được đọc chính xác, nó sẽ là True. Vì vậy, bạn có thể kiểm tra phần cuối của video bằng cách kiểm tra giá trị trả về này Phát Video từ tập tinPhát video bằng OpenCV rất giống với ghi nguồn cấp dữ liệu trực tiếp từ webcam như chúng ta đã thấy trong phần trước. Chúng ta chỉ cần thay đổi chỉ mục camera bằng tên tệp video. Nhưng đôi khi tệp video có thể bị hỏng hoặc không thể đọc chính xác, vì vậy chúng tôi sử dụng phương thức isOpened() của đối tượng VideoCapture để đảm bảo rằng video được đọc thành công. Ngoài ra, trong khi hiển thị khung, chúng ta nên sử dụng thời gian thích hợp cho cv2. waitKey(), vì giá trị quá thấp, video sẽ rất nhanh và giá trị quá cao, video sẽ chậm cv2.IMREAD_UNCHANGED: It specifies to load an image as such including alpha channel.Alternatively, we can pass integer value -1 for this flag.0 Lưu VideoLưu ảnh sau khi xử lý bằng OpenCV khá đơn giản và chúng ta đã xem cách thực hiện bằng cv2. hàm imwrite(). Nhưng đối với video, sau khi xử lý từng khung hình, bạn cần thực hiện thêm một chút công việc để lưu video Ở đây để lưu video, chúng tôi tạo một đối tượng VideoWriter ngoài Đối tượng VideoCapture. Cú pháp của VideoWriter được đưa ra dưới đây cv2.IMREAD_UNCHANGED: It specifies to load an image as such including alpha channel.Alternatively, we can pass integer value -1 for this flag.1 Thông số tên tệp. Tên tệp đầu ra (ví dụ:. sinh nhật. avi). Ở Fedora. DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID thích hợp hơn. Kết quả MJPG trong video kích thước cao. X264 cung cấp video có kích thước rất nhỏ) fps. số khung hình mỗi giây (khung hình/giây) Đây là mã chụp các khung hình từ Máy ảnh, lật từng khung hình theo hướng dọc và lưu lại cv2.IMREAD_UNCHANGED: It specifies to load an image as such including alpha channel.Alternatively, we can pass integer value -1 for this flag.2 Nhận diện khuôn mặt bằng OpenCVSử dụng OpenCV, các tác vụ phức tạp như nhận diện khuôn mặt trở nên dễ thực hiện và vì các mô hình được đào tạo trước có khả năng phát hiện khuôn mặt, mũi và mắt được bao gồm trong gói OpenCV, chúng tôi không cần phải đào tạo bất kỳ trình phân loại nào. Đây là một bài viết về Nhận diện khuôn mặt bằng thuật toán Viola-Jones giải thích cách chúng tôi có thể phát hiện khuôn mặt bằng OpenCV. Bạn cũng sẽ tìm hiểu khái niệm phân loại theo tầng trong bài viết này, khái niệm này cũng được sử dụng trong phần tiếp theo của chúng tôi. e. phát hiện ô tô bằng OpenCV https. //youtube. be/6myMFJl8CbA Phát hiện ô tô với OpenCVBạn có thể đã thấy trong bài viết Nhận diện khuôn mặt bằng Nhận dạng khuôn mặt bằng thuật toán Viola-Jones của Python và OpenCV mà chúng tôi đã sử dụng các mô hình được đào tạo trước để phát hiện khuôn mặt và mắt. Tương tự, chúng tôi cũng có một mô hình được đào tạo trước có thể phát hiện ô tô. Tất cả những gì chúng ta phải làm là sử dụng mô hình này để dựng lên ô tô và sau đó đánh dấu ô tô bằng hình chữ nhật cv2.IMREAD_UNCHANGED: It specifies to load an image as such including alpha channel.Alternatively, we can pass integer value -1 for this flag.3 Nhận dạng khuôn mặt bằng OpenCVNhận dạng khuôn mặt, như tên gợi ý bao gồm phát hiện khuôn mặt và sau đó gắn nhãn cho chúng bằng tên của người đó. Nó phức tạp hơn một chút so với hai ví dụ trước. Ở đây chúng ta phải sử dụng một số thư viện bên ngoài OpenCV. Tôi thực sự khuyên bạn nên xem qua bài viết Nhận dạng khuôn mặt bằng Python và OpenCV để hiểu hoạt động của nhận dạng khuôn mặt và cách triển khai nó bằng OpenCV Câu hỏi thường gặp về OpenCV trong PythonQ. Việc sử dụng OpenCV trong Python là gì? A. OpenCV-Python sử dụng Numpy, được coi là thư viện được tối ưu hóa hiệu quả cho các phép toán số với cú pháp kiểu MATLAB. Mỗi cấu trúc mảng OpenCV được thay đổi thành cũng như từ các mảng Numpy. Điều này cũng giúp kết hợp các thư viện khác sử dụng Numpy, bao gồm SciPy và Matplotlib Q. Làm cách nào để cài đặt OpenCV 3. 0 và Python3. 4+ trên Ubuntu? A. Để cài đặt OpenCV 3. 0 và Python3. 4+ trên Ubuntu, bạn cần làm theo các bước được đề cập bên dưới
Q. Tôi bắt đầu học OpenCV như thế nào? A. Để bắt đầu học OpenCV, bạn có thể tham khảo các bài hướng dẫn của Học Lớn. Bạn sẽ không chỉ học những kiến thức cơ bản mà còn có ý tưởng hay về OpenCV tổng thể Q. Hình thức đầy đủ của OpenCV là gì? A. Dạng đầy đủ của OpenCV là Open Source Computer Vision Library Q. Tại sao OpenCV được sử dụng? A. OpenCV là một thư viện nguồn mở rộng lớn được sử dụng cho máy học, thị giác máy tính và xử lý hình ảnh. Hiện tại, nó đóng một vai trò quan trọng trong thời gian thực. Sử dụng OpenCV giúp xử lý hình ảnh cũng như video để phân loại khuôn mặt, đối tượng hay thậm chí là chữ viết tay của con người Q. OpenCV có dễ không? A. OpenCV trước đó không phải là một trong những thứ dễ học nhất. Tuy nhiên, những ngày này nó đã được đơn giản hóa. Bạn có thể xem qua các hướng dẫn dễ học để hiểu OpenCV Q. OpenCV tốt hơn trong Python hay C++? A. Nó hoàn toàn phụ thuộc vào giai đoạn của một dự án. Nếu bạn đang tạo mẫu, Python sẽ hữu ích hơn. Nếu vì mục đích sản xuất thì C++ tốt hơn. Tuy nhiên, bạn cũng cần biết rằng Python chậm hơn C++ Q. OpenCV có đáng học không? A. Học OpenCV chắc chắn là xứng đáng và bạn nên bắt đầu học OpenCV với Python. Ngôn ngữ lập trình này dễ học hơn và tạo nguyên mẫu các thuật toán Thị giác máy tính nhanh hơn Q. Tôi nên học gì trước OpenCV? A. Nó là một thư viện; . Điều tiếp theo là học các nguyên tắc cơ bản của xử lý hình ảnh. Bạn cũng cần có kiến thức chuyên sâu về lớp và kế thừa trong C++. A. Trước tiên hãy kích hoạt Python của bạn và làm theo các lệnh được đề cập bên dưới
Điều này đưa chúng ta đến phần cuối của bài viết này về Hướng dẫn OpenCV nơi chúng ta đã học về OpenCV. Chúng tôi hy vọng rằng bạn thấy điều này hữu ích và hiện được trang bị tốt hơn trong OpenCV cv2 cho Python là gì?OpenCV-Python là thư viện các liên kết Python được thiết kế để giải quyết các vấn đề về thị giác máy tính . cv2. phương thức imread() tải một hình ảnh từ tệp được chỉ định. Nếu hình ảnh không thể đọc được (do tệp bị thiếu, quyền không phù hợp, định dạng không được hỗ trợ hoặc không hợp lệ) thì phương thức này sẽ trả về một ma trận trống.
cv2 được sử dụng để làm gì?OpenCV-Python là thư viện chứa các liên kết Python được thiết kế để giải quyết các vấn đề về thị giác máy tính. cv2. phương thức imshow() được sử dụng để hiển thị hình ảnh trong cửa sổ . Cửa sổ tự động vừa với kích thước hình ảnh.
cv2 và OpenCV có giống nhau không?cv2 (giao diện cũ trong các phiên bản OpenCV cũ được đặt tên là cv ) là tên mà các nhà phát triển OpenCV đã chọn khi họ tạo trình tạo liên kết . Tên này được giữ làm tên nhập để phù hợp với các loại hướng dẫn khác nhau trên internet.
Làm cách nào để cài đặt cv2 trong python3?Khởi động trình bao Python bằng cách gõ python3 rồi nhấn enter. Bạn sẽ ở bên trong Python shell nơi bạn có thể thực thi mã Python của mình. Nhập gói cv2 là tên của mô-đun OpenCV. Nhập "nhập cv2" và nhấn enter |