Hình dạng hình ảnh 0 Python

Hầu như các thao tác trong phần này chủ yếu liên quan đến Numpy hơn là OpenCV. Cần có kiến ​​thức tốt về Numpy để viết mã được tối ưu hóa tốt hơn với OpenCV

*[Các ví dụ sẽ được hiển thị trong thiết bị đầu cuối Python, vì hầu hết chúng chỉ là một dòng mã]*

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

Trước tiên hãy tải một hình ảnh màu

Bạn có thể truy cập một giá trị pixel theo tọa độ hàng và cột của nó. Đối với hình ảnh BGR, nó trả về một mảng các giá trị Xanh lam, Xanh lục, Đỏ. Đối với hình ảnh thang độ xám, chỉ cường độ tương ứng được trả về

Bạn có thể sửa đổi các giá trị pixel theo cùng một cách

>>> img[100,100] = [255,255,255]

Cảnh báo

Numpy là một thư viện được tối ưu hóa để tính toán mảng nhanh. Vì vậy, chỉ cần truy cập từng giá trị pixel và sửa đổi nó sẽ rất chậm và không được khuyến khích

Lưu ý Phương pháp trên thường được sử dụng để chọn một vùng của một mảng, chẳng hạn như 5 hàng đầu tiên và 3 cột cuối cùng. Đối với quyền truy cập 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. Tuy nhiên, chúng luôn trả về một đại lượng vô hướng, vì vậy 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ị

Phương pháp chỉnh sửa và truy cập pixel tốt hơn

>>> hình ảnh. tập mục[[10,10,2],100]

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

Thuộc tính hình ảnh bao gồm số hàng, cột và kênh;

Hình dạng của một hình ảnh được truy cập bởi img. hình dạng. Nó trả về một bộ số lượng hàng, cột và kênh [nếu hình ảnh có màu]

Lưu ý Nếu một hình ảnh có thang độ xám, bộ được trả về chỉ chứa số lượng hàng và cột, do đó, đây là một phương pháp tốt để kiểm tra xem hình ảnh được tải là thang độ xám hay màu

Tổng số pixel được truy cập bởi img.size

Kiểu dữ liệu hình ảnh được lấy bởi `img. dtype`

Lưu ý. dtype rất quan trọng trong khi gỡ lỗi vì 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ệ

ROI hình ảnh

Đôi khi, bạn sẽ phải chơi với một số vùng hình ảnh nhất định. Đối với tính năng phát hiện mắt trong ảnh, tính năng nhận diện khuôn mặt đầu tiên được thực hiện trên toàn bộ ảnh. Khi có được khuôn mặt, chúng tôi chỉ chọn vùng khuôn mặt và tìm kiếm đôi mắt bên trong khuôn mặt đó thay vì tìm kiếm toàn bộ hình ảnh. Nó cải thiện độ chính xác [vì mắt luôn ở trên khuôn mặt. D ] và hiệu suất [vì chúng tôi tìm kiếm trong một khu vực nhỏ]

ROI một lần nữa thu được bằng cách sử dụng lập chỉ mục Numpy. Ở đây tôi đang chọn quả bóng và sao chép nó sang một vùng khác trong ảnh

>>> bóng = img[280. 340, 330. 390]

>>> hình ảnh[273. 333, 100. 160] = bóng

Kiểm tra kết quả dưới đây

Tách và hợp nhất các kênh hình ảnh

Đôi khi bạn sẽ cần thao tác riêng trên các kênh B,G,R của một hình ảnh. Trong trường hợp này, bạn cần chia hình ảnh BGR thành các kênh đơn lẻ. Trong các trường hợp khác, bạn có thể cần tham gia các kênh riêng lẻ này để tạo hình ảnh BGR. Bạn có thể làm điều này đơn giản bằng cách

Hoặc là

Giả sử bạn muốn đặt tất cả các pixel màu đỏ thành 0 - trước tiên bạn không cần phải tách các kênh. Lập chỉ mục Numpy nhanh hơn

Cảnh báo

sơ yếu lý lịch. split[] là một hoạt động tốn kém [về mặt thời gian]. Vì vậy, chỉ sử dụng nó nếu cần thiết. Nếu không, hãy lập chỉ mục Numpy

Tạo viền cho ảnh [Padding]

Nếu bạn muốn tạo đường viền xung quanh hình ảnh, chẳng hạn như khung ảnh, bạn có thể sử dụng cv. copyMakeBorder[]. Nhưng nó có nhiều ứng dụng hơn cho hoạt động tích chập, không đệm, v.v. Hàm này nhận các đối số sau

  • src - hình ảnh đầu vào
  • trên, dưới, trái, phải - chiều rộng đường viền theo số pixel theo các hướng tương ứng
  • borderType - Cờ xác định loại đường viền nào sẽ được thêm vào. Nó có thể là các loại sau
  • giá trị - Màu của đường viền nếu loại đường viền là cv. BORDER_CONSTANT

Dưới đây là mã mẫu thể hiện tất cả các loại đường viền này để hiểu rõ hơn

từ matplotlib nhập pyplot dưới dạng plt

plt. ô con[231],plt. imshow[img1,'xám'],plt. tiêu đề ['GỐC']

plt. ô con[232],plt. imshow[replicate,'gray'],plt. tiêu đề ['TÁI BẢN']

plt. ô con[233],plt. imshow[phản ánh,'màu xám'],plt. tiêu đề ['PHẢN ÁNH']

plt. ô con[234],plt. imshow[reflect101,'grey'],plt. tiêu đề ['REFLECT_101']

plt. ô con[235],plt. imshow[bọc,'xám'],plt. tiêu đề ['WRAP']

plt. ô con[236],plt. imshow[hằng,'xám'],plt. tiêu đề ['CONSTANT']

Xem kết quả bên dưới. [Hình ảnh được hiển thị với matplotlib. Vì vậy, các kênh RED và BLUE sẽ được hoán đổi cho nhau]

Trong các ứng dụng Xử lý ảnh, thường cần biết kích thước của ảnh được tải hoặc chuyển đổi qua các giai đoạn khác nhau

Trong Hướng dẫn OpenCV này, chúng ta sẽ tìm hiểu cách lấy kích thước hình ảnh trong OpenCV Python với một ví dụ

Khi làm việc với OpenCV Python, hình ảnh được lưu trữ trong numpy ndarray. Để có được hình dạng hoặc kích thước hình ảnh, hãy sử dụng ndarray. shape để lấy kích thước của hình ảnh. Sau đó, bạn có thể sử dụng chỉ mục trên biến dimensions để lấy chiều rộng, chiều cao và số lượng kênh cho mỗi pixel

Trong đoạn mã sau, chúng tôi đã đọc một hình ảnh tới img ndarray. Và sau đó chúng tôi sử dụng ndarray. shape để lấy kích thước của hình ảnh

img = cv2.imread['/path/to/image.png']
dimensions = img.shape

Ví dụ 1 – OpenCV Nhận kích thước hình ảnh

Trong ví dụ này, chúng tôi đã đọc một hình ảnh và sử dụng ndarray. shape để lấy kích thước

Chúng tôi có thể truy cập chiều cao, chiều rộng và số lượng kênh từ img. hình dạng. Chiều cao ở chỉ số 0, Chiều rộng ở chỉ số 1;

Kích cỡ hình. py

import cv2

# read image
img = cv2.imread['/home/img/python.png', cv2.IMREAD_UNCHANGED]

# get dimensions of image
dimensions = img.shape

# height, width, number of channels in image
height = img.shape[0]
width = img.shape[1]
channels = img.shape[2]

print['Image Dimension    : ',dimensions]
print['Image Height       : ',height]
print['Image Width        : ',width]
print['Number of Channels : ',channels]

đầu ra

Image Dimension    :  [149, 200, 4]
Image Height       :  149
Image Width        :  200
Number of Channels :  4

hình ảnh. trả về hình dạng [Chiều cao, Chiều rộng, Số lượng Kênh]

ở đâu

  1. Chiều cao biểu thị số hàng pixel trong hình ảnh hoặc số pixel trong mỗi cột của mảng hình ảnh
  2. Chiều rộng biểu thị số lượng cột pixel trong hình ảnh hoặc số lượng pixel trong mỗi hàng của mảng hình ảnh
  3. Số lượng Kênh biểu thị số lượng thành phần được sử dụng để biểu thị từng pixel

Trong ví dụ trên, Số kênh = 4 đại diện cho các kênh Alpha, Red, Green và Blue

Phần kết luận

Kết thúc Hướng dẫn OpenCV Python này, chúng ta đã học cách lấy hình dạng hình ảnh bằng OpenCV ndarray. hình dạng

Hình dạng 0 có nghĩa là gì trong Python?

shape[0] bằng 0, bạn đang làm việc theo chiều thứ nhất của mảng .

Hình dạng 0 trả về cái gì?

shape[0] sẽ trả về 4, i. e. , phần tử đầu tiên của bộ .

Hình dạng [] trong Python là gì?

Hàm "shape" trả về hình dạng của mảng . Hình dạng là một bộ số nguyên. Những con số này biểu thị độ dài của kích thước mảng tương ứng. Nói cách khác. "Hình dạng" của một mảng là một bộ với số phần tử trên mỗi trục [thứ nguyên].

DF hình 1 là gì?

shape[0] sẽ cung cấp cho bạn tổng số hàng có trong dataFrame. và, df. shape[1] sẽ cung cấp cho bạn số lượng cột có trong dataFrame .

Chủ Đề