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

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 OpenCV

Có 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 Anaconda

Anaconda 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 Mac

Bạ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 ảnh

Bâ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 OpenCV

Chú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

#importing the opencv module  
import cv2  
# using imread['path'] and 1 denotes read as  color image  
img = cv2.imread['dog.jpg',1]  
#This is using for display the image  
cv2.imshow['image',img]  
cv2.waitKey[] # This is necessary to be required so that the image doesn't close immediately.  
#It will run continuously until the key press.  
cv2.destroyAllWindows[] 

Hàm imwrite trong OpenCV

Chú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

import cv2  
# read image  
img = cv2.imread[r'C:\Users\Mirza\dog.jpeg', 1]  
# save image  
status = cv2.imwrite[r'C:\Users\Mirza\dog.jpeg',img]  
print["Image written sucess? : ", status]  

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 ảnh

Trong 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úng
  • Truy cập thuộc tính hình ảnh
  • Đặt Vùng quan tâm [ROI]
  • Tách và hợp nhất các kênh hình ảnh

Truy cập các giá trị pixel và sửa đổi chúng

Vì 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-python  
0

đầ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-python  
1

đầ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-python  
2

đầ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-python  
3

Truy cập Thuộc tính hình ảnh

Chú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-python  
4

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-python  
5

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 ảnh

Chú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-python  
6

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-python  
7

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

Thô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-python  
8

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.
INTER_NEAREST – phép nội suy lân cận gần nhất
INTER_LINEAR – phép nội suy song tuyến tính [được sử dụng theo mặc định] 
INTER_AREA – lấy mẫu lại bằng cách sử dụng vùng pixel . Nó có thể là một phương pháp ưa thích để khử nhiễu hình ảnh, vì nó cho kết quả không có moire. Nhưng khi phóng to hình ảnh, nó tương tự như phương pháp INTER_NEAREST.
INTER_CUBIC – phép nội suy nhị phương trên vùng lân cận pixel 4×4 
INTER_LANCZOS4 – phép nội suy Lanczos trên vùng lân cận pixel 8×8

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-python  
9

đầu ra

gốc
đã thay đổi kích thước

Xoay hình ảnh OpenCV

Chú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 opencv
0

Thông số.
src. Đó là hình ảnh được xoay.
xoay mã. Nó là một enum để chỉ định cách xoay mảng. Dưới đây là một số giá trị có thể.
cv2. cv2. ROTATE_90_CLOCKWISE
cv2. ROTATE_180
cv2. ROTATE_90_COUNTERCLOCKWISE

Dưới đây là một ví dụ sử dụng chức năng này

brew install opencv
1

đầu ra

hình ảnh xoay

Bâ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 opencv
2

trung tâm. trung tâm của hình ảnh [điểm phải xảy ra xoay]
góc. góc mà hình ảnh phải được xoay theo hướng ngược chiều kim đồng hồ.
tỷ lệ. chia tỷ lệ hình ảnh theo giá trị được cung cấp,1. 0 có nghĩa là hình dạng được giữ nguyên.
H. chiều cao của hình ảnh
W. chiều rộng của hình ảnh.
M. ma trận affine được trả về bởi cv2. getRotationMatrix2D
Img. ảnh cần 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 opencv
3

đầu ra

hình ảnh xoay

Chức năng vẽ OpenCV

Chú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òn

Chú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 opencv
4

Thông số.
hình ảnh. Nó là hình ảnh đầu vào mà một vòng tròn sẽ được vẽ.
tọa độ center. Là tọa độ tâm của đường tròn. Các tọa độ được biểu diễn dưới dạng bộ của hai giá trị i. e. [Giá trị tọa độ X, giá trị tọa độ Y].
bán kính. Đó là bán kính của đường tròn.
màu. Là màu của đường viền của hình tròn cần vẽ. Chúng ta có thể chuyển một bộ For trong BGR, ví dụ:. [255, 0, 0] cho màu xanh lam.
độ dày. Nó là độ dày của đường viền hình tròn tính bằng px. Độ dày -1 px sẽ tô hình tròn bằng màu đã chỉ định.
Giá trị trả về. Nó trả về một hình ảnh.

Dưới đây là một vài trong số các ví dụ

brew install opencv
5

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 opencv
6

Thông số

hình ảnh. Nó là hình ảnh đầu vào mà hình chữ nhật sẽ được vẽ.
điểm bắt đầu. Đó là tọa độ bắt đầu [đỉnh trên cùng bên trái] của hình chữ nhật. Các tọa độ được biểu diễn dưới dạng bộ của hai giá trị i. e. [Giá trị tọa độ X, giá trị tọa độ Y].
end_point. Đó là tọa độ kết thúc [dưới cùng bên phải] của hình chữ nhật. Các tọa độ được biểu diễn dưới dạng bộ của hai giá trị i. e. [Giá trị tọa độ X, giá trị tọa độ Y].
màu. Là màu của đường viền của hình chữ nhật cần vẽ. Chúng ta có thể chuyển một bộ For trong BGR, ví dụ:. [255, 0, 0] cho màu xanh lam.
độ dày. Đó là độ dày của đường viền hình chữ nhật tính bằng px. Độ dày -1 px sẽ tô hình chữ nhật bằng màu đã chỉ định.

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 opencv
7

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 opencv
8

Thông số.
hình ảnh. Nó là hình ảnh đầu vào mà dòng sẽ được vẽ.
điểm bắt đầu. Là tọa độ đầu của đường thẳng. Các tọa độ được biểu diễn dưới dạng bộ của hai giá trị i. e. [Giá trị tọa độ X, giá trị tọa độ Y].
end_point. Đó là tọa độ kết thúc của dòng. Các tọa độ được biểu diễn dưới dạng bộ của hai giá trị i. e. [Giá trị tọa độ X, giá trị tọa độ Y].
màu. Đó là màu của đường được vẽ. Chúng ta có thể chuyển một bộ For trong BGR, ví dụ:. [255, 0, 0] cho màu xanh lam.
độ dày. Đó là độ dày của dòng tính bằng px.

Giá trị trả về. Nó trả về một hình ảnh

Đây là một ví dụ

brew install opencv
9

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.
arr - biểu diễn tọa độ của các đỉnh thành một mảng có hình dạng nx1x2 trong đó n là số đỉnh và nó phải có kiểu int32.
is_Closed – Đó là cờ cho biết liệu các đa tuyến được vẽ có bị đóng hay không.
color – Màu của đường đa tuyến. Chúng ta có thể chuyển một bộ For trong BGR, ví dụ:. [255, 0, 0] cho màu xanh lam.
thickness – Nó thể hiện Độ dày của các cạnh của đa tuyến.

Đây là một ví dụ

brew install opencv
9

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ố.
img. Nó đại diện cho hình ảnh đầu vào mà chúng ta phải viết văn bản
văn bản. Văn bản mà chúng tôi muốn viết trên hình ảnh.
tổ chức. Nó biểu thị Góc dưới bên trái của chuỗi văn bản trên hình ảnh. Vì vậy, nó được sử dụng để đặt vị trí của văn bản trên
phông chữ. phông chữ của văn bản. Dưới đây là danh sách các phông chữ được hỗ trợ.
Tỷ lệ phông chữ. Tỷ lệ của phông chữ mà bạn có thể tăng hoặc giảm kích thước
màu. Đại diện cho màu sắc. Chúng ta có thể chuyển một bộ For trong BGR, ví dụ:. [255, 0, 0] cho màu xanh lam.

Đây là một ví dụ

cv2.imread[path, flag]
3

Phát hiện đốm màu OpenCV

Blob 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

  1. Ngưỡng. Đầu tiên, thuật toán chuyển đổi các hình ảnh nguồn thành một số hình ảnh nhị phân bằng cách áp dụng phân ngưỡng với các ngưỡng khác nhau. Chúng tôi xác định hai giá trị ngưỡng, viz- minThreshold [bao gồm] đến maxThreshold [độc quyền]  và bắt đầu từ giá trị ngưỡng bằng minThreshold. Sau đó, nó được tăng theo ngưỡngBước cho đến khi chúng tôi đạt đến ngưỡng tối đa, vì vậy ngưỡng đầu tiên là ngưỡng tối thiểu, ngưỡng thứ hai là ngưỡng tối thiểu + ngưỡngBước, v.v.
  2. nhóm. Trong mỗi ảnh nhị phân, chúng ta có một đường cong nối tất cả các điểm liên tục [dọc theo đường biên], có cùng màu hoặc cường độ
  3. sáp nhập. Tâm của các đốm màu nhị phân trong hình ảnh nhị phân được tính toán và  các đốm màu nằm gần hơn minDistBetweenBlobs[khoảng cách tối thiểu giữa hai đốm màu] được hợp nhất
  4. Tính toán tâm và bán kính. Tâm và bán kính của các đốm màu mới được hợp nhất được tính toán và trả về

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àu sắc. Chúng tôi xác định một tham số blobColor để lọc các đốm màu mà chúng tôi quan tâm. Đặt blobColor bằng 0 để trích xuất các đốm màu tối và để trích xuất các đốm sáng, hãy đặt thành 255. Bộ lọc này so sánh cường độ của hình ảnh nhị phân ở trung tâm của đốm màu với blobColor và lọc tương ứng
  • Theo khu vực. Bằng cách sử dụng bộ lọc này, các đốm màu được trích xuất có diện tích giữa minArea [bao gồm] và maxArea [độc quyền]
  • Theo tuần hoàn. Bằng cách sử dụng bộ lọc này, các đốm màu được trích xuất có độ tròn giữa minCircularity [bao gồm] và maxCircularity [độc quyền]
  • Theo tỷ lệ quán tính tối thiểu với quán tính tối đa. Bằng cách sử dụng bộ lọc này, các đốm màu được trích xuất có tỷ lệ này giữa minInertiaRatio [bao gồm] và maxInertiaRatio [độc quyền]
  • Bằng độ lồi. Bằng cách sử dụng bộ lọc này, các đốm màu được trích xuất có độ lồi [diện tích/diện tích của vỏ lồi đốm màu] giữa minConvexity [bao gồm] và maxConvexity [độc quyền]

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 Canny

Phá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.
minVal. Độ dốc cường độ tối thiểu [bắt buộc]
maxVal. Độ dốc cường độ tối đa [bắt buộc]
L2gradient. là một cờ có giá trị mặc định =False, cho biết định mức L1 mặc định là đủ để tính toán cường độ gradient của hình ảnh, nếu nó được đặt là True, một định mức L2 chính xác hơn được sử dụng để tính toán cường độ gradient của hình ảnh nhưng nó đắt hơn về mặt tính toán.
khẩu độ. kích thước khẩu độ cho toán tử Sobel.

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 OpenCV

Là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 OpenCV
  • Độ mờ trung bình của OpenCV
  • OpenCV Gaussian Blur
  • Bộ lọc song phương OpenCV

trung bình OpenCV

Trong 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ờ.
ksize. Một bộ đại diện cho kích thước hạt nhân mờ.
neo. Nó là một biến kiểu số nguyên đại diện cho điểm neo và giá trị mặc định của nó Điểm là [-1, -1] có nghĩa là điểm neo nằm ở trung tâm nhân.
Kiểu đường viền. Nó đại diện cho loại đường viền được sử dụng cho đầu ra.

Đâ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ị OpenCV 

Trong 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].
dst – Nó đại diện cho đích [hình ảnh đầu ra].
ksize – Nó đại diện cho kích thước của kernel.

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 Blur

Trong 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ờ
dst − hình ảnh đầu ra có cùng kích thước và loại như src.
ksize − Một đối tượng Size đại diện cho kích thước của kernel.
sigmaX − Một biến kiểu double đại diện cho độ lệch chuẩn hạt nhân Gaussian theo hướng X.
sigmaY − Một biến kiểu double đại diện cho độ lệch chuẩn hạt nhân Gaussian theo hướng Y.

Đâ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 OpenCV

Phươ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ố.
src Nguồn Hình ảnh 8-bit hoặc dấu phẩy động, 1 kênh hoặc 3 kênh.
dst Hình ảnh đích có cùng kích thước và loại như src.
d Đường kính của mỗi vùng lân cận pixel được sử dụng trong quá trình lọc. Nếu nó không dương, nó được tính từ sigmaSpace.
sigmaColor Lọc sigma trong không gian màu. Giá trị lớn hơn của tham số có nghĩa là các màu xa hơn trong vùng lân cận pixel [xem sigmaSpace] sẽ được trộn lẫn với nhau, dẫn đến các vùng màu bán bằng nhau lớn hơn.
sigmaSpace Lọc sigma trong không gian tọa độ. Giá trị lớn hơn của tham số có nghĩa là các pixel xa hơn sẽ ảnh hưởng lẫn nhau miễn là màu của chúng đủ gần [xem sigmaColor ]. Khi d>0, nó chỉ định kích thước vùng lân cận bất kể sigmaSpace. Mặt khác, d tỷ lệ với sigmaSpace.
Chế độ đường viền BorderType được sử dụng để ngoại suy các pixel bên ngoài hình ảnh, xem BorderTypes có sẵn tại đây.

Đâ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 OpenCV

Ngưỡ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ản
  • Ngưỡng thích ứng

Ngưỡng đơn giản

Trong 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].
->giá trị ngưỡng. Giá trị của Ngưỡng dưới và trên mà giá trị pixel sẽ thay đổi tương ứng.
-> maxVal. Giá trị tối đa có thể được gán cho một pixel.
-> Kỹ thuật tạo ngưỡng. Loại ngưỡng được áp dụng. Dưới đây là các loại ngưỡng khác nhau mà chúng tôi có thể sử dụng

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].
cv2. THRESH_BINARY_INV. Trường hợp đảo ngược hoặc ngược lại của cv2. THRESH_BINARY. Nếu cường độ pixel lớn hơn ngưỡng, thì giá trị pixel được đặt thành 0 [màu đen], nếu không, giá trị này được đặt thành 255 [màu trắng].
cv. THRESH_TRUNC. Nếu cường độ pixel lớn hơn ngưỡng, thì các giá trị pixel được đặt giống với ngưỡng. Tất cả các giá trị khác vẫn giữ nguyên.
cv. THRESH_TOZERO. Cường độ pixel được đặt thành 0, đối với tất cả cường độ pixel, nhỏ hơn giá trị ngưỡng. Tất cả các giá trị pixel khác vẫn giữ nguyên
cv. THRESH_TOZERO_INV. Trường hợp đảo ngược hoặc ngược lại của cv2. THRESH_TOZERO.

Đâ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].
dst − Một đối tượng của lớp Mat đại diện cho hình ảnh đích [đầu ra].
maxValue − Một biến kiểu double đại diện cho giá trị sẽ được cung cấp nếu giá trị pixel lớn hơn giá trị ngưỡng.
adaptiveMethod − Một biến số nguyên kiểu đại diện cho phương thức thích ứng sẽ được sử dụng. Đây sẽ là một trong hai giá trị sau.
cv. ADAPTIVE_THRESH_MEAN_C. Giá trị ngưỡng là giá trị trung bình của khu vực lân cận trừ đi hằng số C.
cv. ADAPTIVE_THRESH_GAUSSIAN_C. Giá trị ngưỡng là tổng trọng số gaussian của các giá trị lân cận trừ đi hằng số C.

thresholdType − Một biến kiểu số nguyên đại diện cho loại ngưỡng được sử dụng.
blockSize − Một biến kiểu số nguyên biểu thị kích thước của vùng lân cận pixel được sử dụng để tính giá trị ngưỡng.
C − Một biến loại kép đại diện cho hằng số được sử dụng trong cả hai phương pháp [đã trừ giá trị trung bình hoặc giá trị trung bình có trọng số].

Đâ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 OpenCV

Vậ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.
Trong OpenCV, chúng tôi sử dụng hai hàm, một hàm để tìm đường bao và hàm kia để vẽ đường bao. Chúng ta sử dụng hàm findContours[] để tìm các đường viền và drawCounter[] để vẽ một. Đây là cú pháp của 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.
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
Đường viền. Nó chứa các đường viền được phát hiện và  đường viền được lưu trữ dưới dạng một vectơ điểm
Cấp bậc. Vectơ đầu ra tùy chọn, chứa thông tin về cấu trúc liên kết hình ảnh. Nó có nhiều yếu tố như số lượng đường viền. Đối với mỗi đường bao thứ i-contours[i], các thành phần có hệ thống phân cấp[i][0] , hệ thống phân cấp[i][1] , hệ thống phân cấp[i][2] và hệ thống phân cấp[i][3] được đặt thành 0- . Nếu đối với đường viền i không có đường viền tiếp theo, trước đó, chính hoặc lồng nhau, các phần tử tương ứng của phân cấp [i] sẽ là số âm.
Các thông số của chức năng này.

chế độ. Chế độ truy xuất đường viền, hãy xem phương thức RetrievalModes
. Phương pháp xấp xỉ đường viền, xem Chế độ xấp xỉ đường viền
offset. Độ lệch tùy chọn theo đó mọi điểm đường viền được dịch chuyển. Điều này hữu ích nếu các đường viền được trích xuất từ ​​ROI của hình ảnh và sau đó chúng sẽ được phân tích trong toàn bộ bối cảnh hình ảnh.

Đâ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.
đường viền. Tất cả các đường viền đầu vào. Mỗi đường viền được lưu trữ dưới dạng một vectơ điểm.
contourIdx. Tham số cho biết một đường viền để vẽ. Nếu nó là tiêu cực, tất cả các đường viền được vẽ.
màu. Màu của đường nét.
độ dày. Độ dày của các đường viền được vẽ bằng. Nếu nó là số âm [ví dụ: thick=FILLED ], phần bên trong đường viền được vẽ.
Kiểu dòng. Kết nối đường dây. Xem
phân cấp. Thông tin tùy chọn về hệ thống phân cấp. Nó chỉ cần thiết nếu bạn chỉ muốn vẽ một số đường viền [xem maxLevel ].
Cấp độ tối đa. Mức tối đa cho các đường viền được vẽ. Nếu nó là 0, chỉ đường viền được chỉ định được vẽ. Nếu là 1, hàm vẽ [các] đường bao và tất cả các đường bao lồng nhau. Nếu là 2, hàm sẽ vẽ các đường viền, tất cả các đường viền lồng nhau, tất cả các đường viền lồng nhau, v.v. Tham số này chỉ được tính đến khi có hệ thống phân cấp.
bù. Tham số dịch chuyển đường viền tùy chọn. Dịch chuyển tất cả các đường viền đã vẽ theo offset đã chỉ định=[dx,dy].

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 OpenCV

OpenCV 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ơn

Sử 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 OpenCV

So 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.
ngôi đền. mẫu tìm kiếm. Nó không được lớn hơn hình ảnh nguồn và có cùng kiểu dữ liệu.
kết quả Bản đồ kết quả so sánh. Nó phải là dấu phẩy động 32 bit một kênh. Nếu hình ảnh là W×H và mẫu là w×h , thì kết quả là [W−w+1]×[H−h+1].
phương thức. Tham số chỉ định phương pháp so sánh, xem
mask. Tùy chọn

Đâ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 OpenCV

OpenCV 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 ảnh

Thô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 tin

Phá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 Video

Lư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].
bốncc. chỉ định mã FourCC. FourCC là mã 4 byte được sử dụng để chỉ định codec video. Danh sách các mã có sẵn có thể được tìm thấy trong Fourcc. tổ chức. Nó phụ thuộc vào nền tảng. Các codec sau hoạt động tốt với tôi.

Ở 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ỏ]
Trong Windows. DIVX [Sẽ thử nghiệm và bổ sung thêm]
Trong OSX. [Tôi không có quyền truy cập vào OSX. Ai đó có thể điền vào đây không?]
Mã FourCC được chuyển dưới dạng cv2. VideoWriter_fourcc[‘M’,’J’,’P’,’G’] hoặc cv2. VideoWriter_fourcc[*’MJPG] cho MJPG.

fps. số khung hình mỗi giây [khung hình/giây] 
Kích thước khung hình. kích thước của khung.
isColor. Đó là một giá trị cờ. Nếu là True, bộ mã hóa sẽ yêu cầu khung màu, nếu không, nó sẽ hoạt động với khung thang độ xám.

Đâ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 OpenCV

Sử 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 OpenCV

Bạ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 OpenCV

Nhậ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 Python

Q. 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

  • Bắt đầu với cài đặt điều kiện tiên quyết
  • Bây giờ Thiết lập Python [Phần 1]
  • Thiết lập Python [Phần 2]
  • Bây giờ bạn cần xây dựng và cài đặt OpenCV 3. 0 với Python3. 4+ ràng buộc
  • Liên kết Sym-OpenCV 3. 0
  • Bước cuối cùng bao gồm thử nghiệm OpenCV 3. 0 và Python3. 4+ cài đặt

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++.
Q. Làm cách nào để biết Opencv đã được cài đặt hay chưa?

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

  • Đang nhập cv2 # nhập thư viện opencv và
  • cv2. __phiên bản__ #. Điều này sẽ giúp in phiên bản opencv3 của bạn

Đ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

Chủ Đề