Ý nghĩa của hình ảnh OpenCV Python

Để so sánh hai hình ảnh, chúng tôi sử dụng Lỗi bình phương trung bình [MSE] của các giá trị pixel của hai hình ảnh. Các hình ảnh tương tự sẽ có ít giá trị lỗi bình phương hơn. Sử dụng phương pháp này, chúng ta có thể so sánh hai hình ảnh có cùng chiều cao, chiều rộng và số lượng kênh

bước

Bạn có thể sử dụng các bước sau để so sánh hai hình ảnh bằng OpenCV −

Nhập thư viện cần thiết. Trong tất cả các ví dụ Python sau, thư viện Python bắt buộc là OpenCV. Hãy chắc chắn rằng bạn đã cài đặt nó

import cv2

Đọc hình ảnh đầu vào bằng cv2. imread[] và chuyển đổi nó thành thang độ xám. Chiều cao, chiều rộng và số kênh của các hình ảnh phải giống nhau

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]

Xác định một hàm để tính toán Lỗi bình phương trung bình giữa hai hình ảnh

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse

Tính toán Lỗi bình phương trung bình [Lỗi khớp] giữa các hình ảnh

error = mse[img1, img2]

In lỗi khớp hình ảnh [mse] và hiển thị sự khác biệt hình ảnh

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]

In giá trị kết quả, số liệu khớp hình ảnh. Giá trị càng thấp thì càng phù hợp

print["Matching Image 1 with Image 2:", ret12]

Hãy xem xét một số ví dụ để hiểu rõ hơn

Chúng tôi sẽ sử dụng các hình ảnh sau đây làm Tệp đầu vào trong các ví dụ bên dưới

ví dụ 1

Trong ví dụ này, chúng tôi tạo một Mạng nơ-ron nhân tạo đơn giản với bốn lớp không có chức năng chuyển tiếp

đầu ra

Khi thực thi, nó sẽ tạo ra đầu ra sau trên bàn điều khiển -

Image matching Error between the two images: 3.0696934396076028

Và chúng tôi nhận được cửa sổ sau hiển thị sự khác biệt giữa hai hình ảnh -

ví dụ 2

Trong chương trình Python này, chúng tôi so sánh ba hình ảnh

import cv2 import numpy as np import matplotlib.pyplot as plt img1 = cv2.imread['panda.jpg'] img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY] h, w = img1.shape img2 = cv2.imread['panda1.jpg'] img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY] img3 = cv2.imread['bike.jpg'] img3 = cv2.cvtColor[img3, cv2.COLOR_BGR2GRAY] def error[img1, img2]: diff = cv2.subtract[img1, img2] err = np.sum[diff**2] mse = err/[float[h*w]] msre = np.sqrt[mse] return mse, diff match_error12, diff12 = error[img1, img2] match_error13, diff13 = error[img1, img3] match_error23, diff23 = error[img2, img3] print["Image matching Error between image 1 and image 2:",match_error12] print["Image matching Error between image 1 and image 3:",match_error13] print["Image matching Error between image 2 and image 3:",match_error23] plt.subplot[221], plt.imshow[diff12,'gray'],plt.title["image1 - Image2"],plt.axis['off'] plt.subplot[222], plt.imshow[diff13,'gray'],plt.title["image1 - Image3"],plt.axis['off'] plt.subplot[223], plt.imshow[diff23,'gray'],plt.title["image2 - Image3"],plt.axis['off'] plt.show[]

đầu ra

Khi thực thi, chương trình Python ở trên sẽ tạo đầu ra sau trên bàn điều khiển -

________số 8

Và chúng tôi nhận được cửa sổ sau, hiển thị sự khác biệt giữa các hình ảnh -

Lưu ý rằng lỗi Matching giữa Image1 và Image2 ít hơn so với lỗi Matching giữa Image 1 & 3 và giữa Image 2 & 3. Vì vậy, Hình 1 và Hình 2 giống nhau hơn

Trong bài viết này, chúng tôi sẽ cố gắng mở một hình ảnh bằng cách sử dụng thư viện OpenCV [Open Source Computer Vision]. Các loại tệp sau đây được hỗ trợ trong thư viện OpenCV

  • Windows bitmap – *. bmp, *. ngâm nga
  • Tệp JPEG – *. jpeg, *. jpg
  • Biểu đồ minh họa mạng lưới không dây - *. png
  • WebP – *. trang web
  • Raster mặt trời – *. thưa ngài, *. ras
  • Tệp TIFF – *. tiff, *. tif
  • Dữ liệu không gian địa lý Raster và Vector được hỗ trợ bởi GDAL

Để sử dụng được thư viện OpenCV trong python thì điều kiện tiên quyết chúng ta cần cài đặt các thư viện này

  1. Thư viện Numpy. Máy tính xử lý hình ảnh ở dạng ma trận mà NumPy được sử dụng và OpenCV sử dụng nó trong nền
  2. Trăn OpenCV. Thư viện OpenCV trước đây là cv nhưng phiên bản cập nhật là cv2. Nó được sử dụng để thao tác hình ảnh và video.
     

Để cài đặt các thư viện này, chúng ta cần chạy các lệnh pip này trong cmd

pip install opencv-python
pip install numpy
pip install matplotlib

Các bước để đọc và hiển thị một hình ảnh trong OpenCV là

1. Đọc ảnh bằng hàm imread[]

2. Tạo cửa sổ GUI và hiển thị hình ảnh bằng hàm imshow[]

3. Sử dụng hàm waitkey[0] để giữ cửa sổ hình ảnh trên màn hình theo số giây đã chỉ định, o nghĩa là cho đến khi người dùng đóng nó, nó sẽ giữ cửa sổ GUI trên màn hình

4. Xóa cửa sổ hình ảnh khỏi bộ nhớ sau khi hiển thị bằng hàm destroyAllWindows[]

Hãy bắt đầu đọc một hình ảnh. sử dụng cv2.
 Để đọc hình ảnh cv2. phương thức imread[] được sử dụng. Phương thức này 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.

cú pháp. cv2. imread[đường dẫn, cờ]

Thông số.
đường dẫn. Một chuỗi đại diện cho đường dẫn của hình ảnh được đọc.
cờ. Nó chỉ định cách đọc hình ảnh. Giá trị mặc định của nó là cv2. IMREAD_COLOR

Giá trị trả về. Phương thức này trả về một hình ảnh được tải từ tệp đã chỉ định

Ghi chú.  

  1. Hình ảnh phải nằm trong thư mục làm việc hoặc phải cung cấp đường dẫn đầy đủ của hình ảnh
  2. Theo mặc định, OpenCV lưu trữ hình ảnh màu ở định dạng BGR [Xanh lam và Đỏ]

Tất cả ba loại cờ được mô tả dưới đây

cv2. IMREAD_COLOR. Nó chỉ định tải một hình ảnh màu. Mọi độ trong suốt của hình ảnh sẽ bị bỏ qua. Nó là cờ mặc định. Ngoài ra, chúng ta có thể truyền giá trị nguyên 1 cho cờ này.
cv2. IMREAD_GRAYSCALE. Nó chỉ định tải một hình ảnh ở chế độ thang độ xám. Ngoài ra, chúng ta có thể truyền giá trị nguyên 0 cho cờ này.
cv2. IMREAD_UNCHANGED. Nó chỉ định tải một hình ảnh như vậy bao gồm cả kênh alpha. Ngoài ra, chúng ta có thể truyền giá trị nguyên -1 cho cờ này.

Các mã dưới đây là các triển khai để đọc hình ảnh và hiển thị hình ảnh trên màn hình bằng các hàm thư viện OpenCV và matplotlib.
 
Ví dụ #1 [Sử dụng OpenCV].

Hình ảnh được sử dụng là

 

Python3




print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
6

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
7
print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
8

 

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
9

print["Matching Image 1 with Image 2:", ret12]
0

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
00
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
01
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
02____103
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
04

 

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
05

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
06

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
07

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
08
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
09
def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
00

 

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
01

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
02

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
03

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
04

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
05

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
06

def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
07
def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
08
def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
09

 

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
00

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
01

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
02

đầu ra

Đọc hình ảnh bằng cv2 ở định dạng BGR

Chúng ta có thể nhìn thấy hình dạng, tôi. e. , chiều rộng và chiều cao và các kênh của hình ảnh bằng thuộc tính hình dạng

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
0
def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
0

Thư viện Matplotlib sử dụng định dạng màu RGB để đọc ảnh màu. Ở đây chúng tôi đang trình bày một ví dụ về đọc một hình ảnh bằng thư viện này.
Ví dụ #2

Python3




img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
03

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
7
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
05

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
7
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
07

img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
00
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
01
img1 = cv2.imread['panda.png']
img2 = cv2.imread['panda1.png']
img1 = cv2.cvtColor[img1, cv2.COLOR_BGR2GRAY]
img2 = cv2.cvtColor[img2, cv2.COLOR_BGR2GRAY]
02
print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
11
def mse[img1, img2]:
   h, w = img1.shape
   diff = cv2.subtract[img1, img2]
   err = np.sum[diff**2]
   mse = err/[float[h*w]]
   return mse
09

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
13

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
14

 

print["Image matching Error between the two images:", mse]
cv2.imshow["Contour", img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
15


Đọc ảnh bằng cv2 và hiển thị bằng matplotlib sẽ hiển thị ảnh ở định dạng BGR

Ghi chú. Xem sự khác biệt về màu sắc của hình ảnh được đọc bởi thư viện cv2 và matplotlib. Vì cv2 sử dụng định dạng màu BGR và matplotlib sử dụng định dạng màu RGB. Để chuyển đổi BGR sang RGB, chúng tôi sử dụng một chức năng

cv2 có nghĩa là gì trong Python?

cv2 là tên nhập mô-đun cho opencv-python , "Gói OpenCV chỉ dành cho CPU dựng sẵn không chính thức dành cho Python". OpenCV truyền thống có nhiều bước phức tạp liên quan đến việc xây dựng mô-đun từ đầu, điều này là không cần thiết. Tôi khuyên bạn nên sử dụng thư viện opencv-python.

Hình ảnh được thể hiện như thế nào trong OpenCV?

Trong OpenCV, hình ảnh được biểu diễn dưới dạng mảng Numpy 3 chiều . Một hình ảnh bao gồm các hàng pixel và mỗi pixel được biểu thị bằng một mảng các giá trị biểu thị màu của nó. Ở đâu [72 99 143] , v.v. , là các giá trị xanh dương, xanh lục và đỏ [BGR] của một pixel đó.

Bạn có thể tính trung bình các giá trị RGB không?

Đây là mẹo nhanh dành cho những người thấy mình cần tính trung bình nhiều màu RGB vì một số lý do. Phương pháp điển hình để lấy trung bình các màu RGB là cộng tất cả các giá trị màu đỏ, xanh lá cây và xanh lam rồi chia mỗi giá trị cho số lượng pixel để có được các thành phần của màu cuối cùng.

Chủ Đề