Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

Làm thế nào tôi có thể tạo một hàm lấy tệp hình ảnh (không phải tên tệp hình ảnh) trong Python. Đơn giản, giống như những điều sau:

FaceController.py

import cv2
from Computer_Vision import Face_Detector as FD


def detectface():
    img = cv2.imread('DSC_1902.JPG')
    FD.detect(img)


detectface()

Face_Detector.py

import cv2

def detect(img):
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.namedWindow('img',cv2.WINDOW_NORMAL)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('messigray.png', img)
    return img

Error:

OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp, line 1698
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    cv2.error: C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale

4.1. Chuyển đổi hình ảnh với các chức năng Jo

Trong một bài học trước, chúng tôi đã sử dụng mã tương tự như sau, làm tăng lượng màu xanh lá cây trong một hình ảnh:

Khi chúng tôi học cách vẽ với mô -đun rùa, chúng tôi đã lấy mã cho phép chúng tôi vẽ một hình vuông và chuyển đổi nó thành một chức năng. Theo cách tương tự, chúng ta có thể chuyển đổi mã thao tác hình ảnh của mình thành một hàm và gọi nó bất cứ khi nào chúng ta muốn thao tác với một số hình ảnh. Trong mã được hiển thị bên dưới, tôi đã tạo một hàm có hình ảnh và một số đại diện cho số lượng để thêm vào kênh màu xanh lá cây, sau đó tăng lượng màu xanh lá cây cho mỗi pixel và cuối cùng trả về hình ảnh đã thay đổi.

Lưu ý rằng trong hàm, một hình ảnh trống có cùng kích thước với hình ảnh gốc đã được tạo. Sau đó, chúng tôi lặp qua từng pixel trong hình ảnh gốc, trích xuất các giá trị RGB từ mỗi pixel, tăng số lượng trong kênh màu xanh lá cây, sau đó đặt pixel tương ứng trong hình ảnh mới (hình ảnh bắt đầu dưới dạng trống). Bởi vì đây là một hàm hiệu quả (trả về một đối tượng hình ảnh), chúng ta có thể đặt kết quả thành một biến, được gọi là converted_img bên dưới.new image (the one that began as an EmptyImage). Because this is a fruitful function (which returns a image object), we can set the result to a variable, which is called converted_img below.

Ghi chú

Nếu bạn thích chức năng để kích thích trong khi nó chạy, bạn có thể viết lại chức năng để có một tham số để ImageWin vẽ, như sau:

4.2. Kiểm soát thao tác hình ảnh với Micro: Bit¶

Bây giờ chúng tôi có thể tổ chức mã thao tác hình ảnh của mình bằng các chức năng, việc gọi các chức năng thao tác hình ảnh này khi xảy ra một sự kiện cụ thể là đơn giản. Ví dụ: chúng ta có thể muốn gọi hàm increase_green khi nhấn nút A trên micro: BIT được nhấn. Để làm cho mọi thứ trở nên thú vị hơn, trước tiên chúng ta sẽ nhận được giá trị gia tốc kế trên trục X (để xác định số lượng vi mô: bit bị nghiêng sang trái hoặc phải) và sử dụng giá trị kết quả là đối số amount_of_green_to_add chúng ta chuyển đến hàm increase_green . Vì giá trị gia tốc kế sẽ âm khi micro: bit bị nghiêng sang trái, nếu chúng ta nhấn nút A trong khi nghiêng sang trái, chúng ta sẽ loại bỏ màu xanh lá cây khỏi hình ảnh. Nếu micro: bit bị nghiêng sang phải, giá trị gia tốc kế sẽ dương, vì vậy chúng tôi sẽ thêm màu xanh lá cây vào hình ảnh.

Thay vì có nút thứ hai không hoạt động, chúng tôi sẽ thực hiện chức năng thao tác hình ảnh khác khi nhấn nút B. Ví dụ này, tôi đã chọn lấy âm của hình ảnh khi nhấn nút B.

Cuối cùng, thật tuyệt khi có một cách để kết thúc chương trình khi chúng ta chơi xong với hình ảnh. Để thực hiện điều này, tôi đã tạo một biến still_playing và đặt nó thành True. Khi bạn lật micro: bit over (vì vậy các đèn LED đang đối mặt với mặt đất), trục Z trở nên dương và chúng tôi thay đổi biến still_playing thành

import cv2

def detect(img):
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.namedWindow('img',cv2.WINDOW_NORMAL)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('messigray.png', img)
    return img
1. Điều này làm cho vòng lặp thoát ra, kết thúc chương trình của chúng tôi.

Trước khi chạy chương trình sau trong Thonny, hãy chắc chắn lưu hình ảnh này trong cùng một thư mục với mã Python của bạn:

Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

import image
import microbit

def increase_green(original_image, amount_of_green_to_add):
    width = original_image.get_width()
    height = original_image.get_height()
    new_image = image.EmptyImage(width, height)

    for row in range(height):
        for col in range(width):
            p = original_image.get_pixel(col, row)

            new_red = p.get_red()
            new_green = p.get_green() + amount_of_green_to_add
            new_blue = p.get_blue()

            new_pixel = image.Pixel(new_red, new_green, new_blue)

            new_image.set_pixel(col, row, new_pixel)
    return new_image

def negative(original_image):
    width = original_image.get_width()
    height = original_image.get_height()
    new_image = image.EmptyImage(width, height)

    for row in range(height):
        for col in range(width):
            p = original_image.get_pixel(col, row)

            new_red = 255 - p.get_red()
            new_green = 255 - p.get_green()
            new_blue = 255 - p.get_blue()

            new_pixel = image.Pixel(new_red, new_green, new_blue)

            new_image.set_pixel(col, row, new_pixel)
    return new_image


img_file = "sneakers.jpg"
img = image.Image(img_file)
win = image.ImageWin(img.get_width(), img.get_height())
img.draw(win)


still_playing = True

while still_playing:
    if microbit.button_a.was_pressed():
        x_tilt = microbit.accelerometer.get_x()
        converted_img = increase_green(img, x_tilt)
        converted_img.draw(win)

    if microbit.button_b.was_pressed():
        converted_img = negative(img)
        converted_img.draw(win)

    if microbit.accelerometer.get_z() > 0:
        still_playing = False

4.2.1. Thử cái này¶

  • Thực hiện thuật toán thao tác hình ảnh khác và thay thế hàm âm bằng hàm mới của bạn (nói cách khác, chức năng của bạn sẽ thực thi khi nhấn nút B)
  • Lưu nhiều hơn một tệp hình ảnh vào thư mục chứa mã python của bạn và chuyển đổi hình ảnh nào đang được thao tác dựa trên khi vi mô: bit bị nghiêng rất xa hoặc rất xa (trên trục y).

4.3. Thực hành các vấn đề hãng

Đối với các vấn đề sau, hãy sử dụng một trong những hình ảnh sau:

Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

skflag.png

Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

moon.jpg

Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

sneakers.jpg

Hướng dẫn how do you pass an image into a function in python? - làm thế nào để bạn chuyển một hình ảnh vào một hàm trong python?

rooster.jpg

4.3.1. Chức năng RED Remover

Tạo một hàm gọi là

import cv2

def detect(img):
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.namedWindow('img',cv2.WINDOW_NORMAL)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite('messigray.png', img)
    return img
2 thực hiện thao tác hình ảnh và trả về hình ảnh đã thay đổi. Chức năng loại bỏ tất cả các kênh màu đỏ, nhưng để lại số lượng màu xanh lá cây và màu xanh không thay đổi.

4.3.2. Lựa chọn của bạn¶

Nhìn lại một vài phần cuối cùng, và chọn 2 vấn đề thực hành thao tác hình ảnh. Chuyển đổi chúng thành các chức năng, sau đó kiểm soát chúng bằng micro: bit. Gọi một trong các chức năng này khi nhấn nút A và chức năng khác khi nhấn nút B.

Làm thế nào để bạn chèn một hình ảnh vào Python?

Làm thế nào để làm nó…..
Tạo tệp Python mới và nhập các gói sau: Nhập SYS Nhập CV2 Nhập Numpy dưới dạng NP ..
Chỉ định hình ảnh đầu vào là đối số đầu tiên cho tệp và đọc nó bằng hàm đọc hình ảnh. Chúng tôi sẽ sử dụng Forest.jpg, như sau: ...
Hiển thị hình ảnh đầu vào, như sau: ....
Bây giờ chúng tôi sẽ cắt hình ảnh này ..

Làm thế nào để Python chuyển các đối tượng cho các chức năng?

Python chuyển các đối số bằng cách chuyển nhượng.Đó là, khi bạn gọi hàm Python, mỗi đối số hàm trở thành một biến mà giá trị truyền được gán ...
Nếu một đối tượng đại diện cho giá trị 2 đã tồn tại, thì nó được truy xuất.....
Bộ đếm tham chiếu của đối tượng này được tăng lên ..

Làm cách nào để lấy một hình ảnh trong Python?

Hiển thị một hình ảnh trong Python..
Sử dụng mô -đun PIL để hiển thị hình ảnh trong Python ..
Sử dụng mô -đun OpenCV để hiển thị hình ảnh trong Python ..
Sử dụng ipython.display để hiển thị hình ảnh trong Python ..
Sử dụng thư viện matplotlib để hiển thị hình ảnh trong Python ..

Làm thế nào để bạn trả lại một hình ảnh từ một hàm trong Python?

Nếu bạn muốn hình ảnh byte: Với Open ("FilePath/FileName", "RB") dưới dạng f: Image = f.Read () Return Image nhưng bạn có thể không biết phải làm gì với điều đó.Có một thư viện có tên là Gối xử lý tốt hình ảnh, bạn sẽ muốn: từ PIL Nhập hình ảnh DEF (ImagePath): IMG = Image.open("filepath/filename","rb") as f: image=f. read() return image But you might not know what to do with that. There is a library called Pillow which handles images well, you'll want to : from PIL import Image def function(imagePath): img=Image.