STDIO
Tìm kiếm gần đây
    • 0

    OpenCV với Python trong Ứng Dụng Đếm Số Lượng

    Bài viết ứng dụng OpenCV để nhận dạng và đếm số lượng vật thể giúp giảm bớt thời gian làm việc thủ công cho con người. Bạn có thể ứng dụng ngoài đếm đậu để đếm nhiều loại vật thể khác nhau với số lượng lớn.

    Võ Lê Huy

    02/05/2019
    13/09/2020
    2 phút đọc
    OpenCV với Python trong Ứng Dụng Đếm Số Lượng

    Giới thiệu

    Hiện nay máy móc giúp đỡ cho con người trong rất nhiều công việc như cơ khí, vũ trang, nhưng hầu hết các công việc đó máy móc giúp đỡ về phần sức khỏe, về thể chất của con người. Con người suy nghĩ và đưa ra quyết định cho máy móc làm việc, vậy phần cốt lõi nếu muốn máy móc làm hết công việc đó là máy móc phải nhận dạng được thế giới xung quanh.

    Bài viết này ứng dụng OpenCV vào việc đếm số lượng các vật thể, tôi dùng Python để tiện cho việc viết demo, bạn có thể sử dụng OpenCV C++ hoặc C# với EmguCV cũng cho kết quả tương tự.

    Môi trường thử nghiệm

    • Python phiên bản 3.6.5.
    • OpenCV phiên bản 3.4.1.

    Sử dụng OpenCV trong bài toán đếm đậu

    Tôi phân ra thành hai bước chính đó là: Nhận dạng và đếm.

    Cài đặt thư viện OpenCV và Numpy qua dòng lệnh

    pip install opencv-python
    pip install numpy

    Tôi phải khai báo trong đoạn script cho biết những thư viện mà tôi sắp sử dụng

    from cv2 import cv2
    import numpy as np
    from skimage.morphology import opening

    Nhận dạng

    Đầu tiên tôi đọc tấm ảnh lên và đặt tên là image

    image = cv2.imread("images/dem-dau-voi-opencv.jpg")

    Tạo một bức ảnh màu xám từ ảnh gốc và đặt tên là GrayImage

    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    Tôi sử dụng thuật toán Gaussian để làm mờ bức ảnh từ bức ảnh xám

    blur = cv2.GaussianBlur(grayImage, (9,9), 1)
    

    Tiếp theo tôi sử dụng phương thức threshold nhưng tôi nhận thấy rằng bức ảnh của tôi có độ sáng phân bổ không đều nên thay vào đó tôi sử dụng phương thức adaptiveThreshold

    threshold = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, -5)

    Lọc nhiễu với Opening

    opening = cv2.morphologyEx(threshold, cv2.MORPH_OPEN, kernel)

    Phác họa ảnh

    cv2.imshow('opening', opening)

    Đếm

    _, contours, _ = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
    print("Cout: " + str(len(contours))) 

    Kết thúc chương trình với:

    cv2.waitKey(0) 
    cv2.destroAllWindows()

    Kết quả khi chạy chương trình trên:

    Source code đầy đủ

    beans
    from cv2 import cv2
    import numpy as np
    from skimage.morphology import opening
    
    img = cv2.imread("beans.jpg") 
    kernel = np.ones((5,5),np.uint8)
    
    # Bước 1: Chuyển về ảnh xám
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # Bước 2: Làm mờ ảnh
    blur = cv2.GaussianBlur(gray, (9, 9), 1)
    cv2.imshow('new', blur)
    
    # Bước 3: Lọc nhiễu
    new = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, -5)
    
    # Bước 4: Opening
    opening = cv2.morphologyEx(new, cv2.MORPH_OPEN, kernel)
    
    # Bước 5: Đếm
    _, contours, _ = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    # Kiểm tra kết quả
    cv2.drawContours(img, contours, -1, (255, 0, 0), 3)
    cv2.imshow('opening', opening)
    print("Count: " + str(len(contours)))
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Tham khảo

    Computer Vision

    Computer Vision

    Thị giác máy tính.

    Sản phẩm

    Đề xuất

    OpenCV với Python trong Ứng Dụng Phát Hiện Khuôn Mặt Trong Bức Ảnh

    OpenCV với Python trong Ứng Dụng Phát Hiện Khuôn Mặt Trong Bức Ảnh

    Tự động nhận dạng các khuôn mặt có trong bức ảnh với OpenCV và Python, ...

    Computer VisionOpenCV

    28/01/2019

    Xử Lý Ảnh Với OpenCV: Lọc Số Trong Ảnh

    Xử Lý Ảnh Với OpenCV: Lọc Số Trong Ảnh

    Giới thiệu lọc số ảnh, khái niệm và công thức nhân chập ma trận, một số ...

    Computer VisionOpenCV

    23/01/2015

    Khám phá thêm

    Hàm Trong Python - Nâng Cao

    Hàm Trong Python - Nâng Cao

    Hướng dẫn sử dụng hàm có sử dụng tham số mặc định, tham số sử dụng từ ...

    PythonCheat sheet

    27/03/2015

    Ruler - Công Cụ Đo Khoảng Cách Trên Windows

    Ruler - Công Cụ Đo Khoảng Cách Trên Windows

    Đối với ngành công nghiệp phần mềm, đặc biệt là trong kiến trúc, thiết ...

    BugsỨng dụng

    26/10/2019

    Xử Lý Ảnh Với OpenCV: Các Phép Toán Hình Thái Học

    Xử Lý Ảnh Với OpenCV: Các Phép Toán Hình Thái Học

    Giới thiệu những thuật toán cơ sở trong xử lý hình thái học, những thuật ...

    Computer VisionOpenCV

    23/01/2015

    Hiện Thực Quadtree Và Ứng Dụng trong Lập Trình Game

    Hiện Thực Quadtree Và Ứng Dụng trong Lập Trình Game

    Ứng dụng Quadtree xét va chạm (Collision Detection) trong không gian để ...

    Lập Trình GameKiến Thức Nâng Cao

    31/07/2015

    Lập Trình Hiệu Ứng Trong Cocos2d-x 3.x.x

    Lập Trình Hiệu Ứng Trong Cocos2d-x 3.x.x

    Bài viết nằm trong loạt bài viết của chương trình Tự Học Cocos2d-x ...

    Lập Trình GameCocos2d-x

    23/01/2015

    Xây Dựng Câu Truy Vấn trong Hibernate với HQL

    Xây Dựng Câu Truy Vấn trong Hibernate với HQL

    HQL (Hibernate Query Language) hỗ trợ thao tác với cơ sở dữ liệu theo ...

    JavaHibernate

    21/09/2014

    Xử Lý Ảnh Với OpenCV: Độ Sáng, Độ Tương Phản Và Biểu Đồ Tần Số Histogram

    Xử Lý Ảnh Với OpenCV: Độ Sáng, Độ Tương Phản Và Biểu Đồ Tần Số Histogram

    Hướng dẫn thay đổi Brightness, Contrast của ảnh, tìm hiểu biểu đồ tần số ...

    Computer VisionOpenCV

    23/01/2015

    Tín Hiệu Số Và Tương Tự - Analog/Digital

    Tín Hiệu Số Và Tương Tự - Analog/Digital

    Trong ngành điện tử nói chung và trong lập trình vi điểu khiển nói ...

    Điện Tử Ứng DụngKiến thức & linh kiện

    22/06/2016

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020