美文网首页
python实现统计图片中物品的数量

python实现统计图片中物品的数量

作者: 鸿雁长飞光不度 | 来源:发表于2024-08-13 13:16 被阅读0次

    下面代码有chatgpt完成, 粗略统计一个照片中物品的数量

    import cv2
    import os
    
    def count_icons_in_image(image_path, debug_folder, threshold=200, min_icon_area=50):
        """
        Count the number of icons in an image by detecting contours of non-background areas.
        Save the processed image with contours drawn to a debug folder.
    
        Parameters:
        - image_path: str, path to the image file.
        - debug_folder: str, path to the folder where debug images will be saved.
        - threshold: int, threshold for background color (default is 200, suitable for white backgrounds).
        - min_icon_area: int, minimum area to consider a contour as an icon.
    
        Returns:
        - count: int, number of icons detected in the image.
        """
        # Load the image
        image = cv2.imread(image_path)
    
        # Convert the image to grayscale
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
        # Apply a binary threshold to isolate non-background areas
        _, thresh = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY_INV)
    
        # Apply a Gaussian blur to reduce noise
        blurred = cv2.GaussianBlur(thresh, (5, 5), 0)
    
        # Apply morphological operations to reduce noise
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        morph = cv2.morphologyEx(blurred, cv2.MORPH_CLOSE, kernel)
    
        # Find contours in the morphologically processed image
        contours, _ = cv2.findContours(morph, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
        # Filter out small contours based on area and draw them on the image
        icons_count = 0
        for cnt in contours:
            area = cv2.contourArea(cnt)
            if area > min_icon_area:
                icons_count += 1
                # Draw the contour on the image
                cv2.drawContours(image, [cnt], -1, (0, 255, 0), 2)  # Green contour
    
        # Save the debug image with contours
        debug_image_path = os.path.join(debug_folder, os.path.basename(image_path))
        cv2.imwrite(debug_image_path, image)
    
        return icons_count
    
    def count_icons_in_folder(folder_path, threshold=200, min_icon_area=50):
        """
        Count icons in all images in a folder, print the result, and save debug images.
    
        Parameters:
        - folder_path: str, path to the folder containing images.
        - threshold: int, threshold for background color (default is 200, suitable for white backgrounds).
        - min_icon_area: int, minimum area to consider a contour as an icon.
        """
        # Create a debug folder to save processed images
        debug_folder = os.path.join(folder_path, 'debug')
        os.makedirs(debug_folder, exist_ok=True)
    
        # Get a list of all files in the folder
        files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
    
        for file_name in files:
            file_path = os.path.join(folder_path, file_name)
    
            try:
                # Count icons in the image
                count = count_icons_in_image(file_path, debug_folder, threshold, min_icon_area)
                print(f"Image: {file_name}, Icons found: {count}")
            except Exception as e:
                print(f"Error processing {file_name}: {e}")
    
    # Define the path to the folder containing images
    folder_path = '/Users/meican/Downloads/src/'
    
    # Count icons in all images in the folder
    count_icons_in_folder(folder_path)
    
    
    # Define the path to the folder containing images
    folder_path = '/Users/meican/Downloads/src'
    
    # Count icons in all images in the folder
    count_icons_in_folder(folder_path)
    

    相关文章

      网友评论

          本文标题:python实现统计图片中物品的数量

          本文链接:https://www.haomeiwen.com/subject/znhjkjtx.html