Bootstrap

结合机器视觉与深度学习的 Python 项目

以下是一个结合机器视觉与深度学习的 Python 项目示例,用于对茶汤照片进行背景处理、识别颜色最均匀的区域、进行色彩校正并提取 RGB 值,同时可以处理从采集装置传输到电脑的照片。

项目思路

  1. 背景处理:使用 OpenCV 库对图像进行预处理,如高斯模糊、边缘检测等,去除背景干扰。
  2. 识别颜色最均匀的区域:将图像分割成小区域,计算每个区域的颜色方差,选择方差最小的区域作为颜色最均匀的区域。
  3. 色彩校正:使用标准色卡或已知颜色的区域进行色彩校正。
  4. 提取 RGB 值:从颜色最均匀的区域中提取平均 RGB 值。
  5. 处理采集装置传输的照片:可以使用 Python 的文件操作功能,监听指定文件夹,当有新照片传入时自动处理。

代码实现

import cv2
import numpy as np
import os
import time

# 背景处理函数
def background_processing(image):
    # 高斯模糊
    blurred = cv2.GaussianBlur(image, (5, 5), 0)
    # 转换为灰度图像
    gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY)
    # 边缘检测
    edges = cv2.Canny(gray, 50, 150)
    # 查找轮廓
    contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 创建掩码
    mask = np.zeros_like(gray)
    cv2.drawContours(mask, contours, -1, 255, thickness=cv2.FILLED)
    # 应用掩码
    result = cv2.bitwise_and(image, image, mask=mask)
    return result

# 识别颜色最均匀的区域
def find_most_uniform_region(image, grid_size=50):
    height, width, _ = image.shape
    min_variance = float('inf')
    most_uniform_region = None

    for y in range(0, height, grid_size):
        for x in range(0, width, grid_size):
            roi = image[y:y+grid_size, x:x+grid_size]
            if roi.size > 0:
                variance = np.var(roi, axis=(0, 1))
                total_variance = np.sum(variance)
                if total_variance < min_variance:
                    min_variance = total_variance
                    most_uniform_region = roi

    return most_uniform_region

# 色彩校正(简单示例,假设已知标准颜色)
def color_correction(image, standard_color=(255, 255, 255)):
    # 计算平均颜色
    mean_color = np.mean(image, axis=(0, 1))
    # 计算校正系数
    correction_factors = np.divide(standard_color, mean_color)
    # 应用校正系数
    corrected_image = np.multiply(image, correction_factors).astype(np.uint8)
    return corrected_image

# 提取 RGB 值
def extract_rgb_values(image):
    mean_rgb = np.mean(image, axis=(0, 1)).astype(int)
    return mean_rgb

# 处理照片的主函数
def process_image(image_path):
    # 读取图像
    image = cv2.imread(image_path)
    if image is None:
        print(f"无法读取图像: {image_path}")
        return

    # 背景处理
    processed_image = background_processing(image)

    # 识别颜色最均匀的区域
    uniform_region = find_most_uniform_region(processed_image)

    # 色彩校正
    corrected_region = color_correction(uniform_region)

    # 提取 RGB 值
    rgb_values = extract_rgb_values(corrected_region)

    print(f"提取的 RGB 值: {rgb_values}")

    # 显示处理后的图像
    cv2.imshow("Processed Image", processed_image)
    cv2.imshow("Most Uniform Region", uniform_region)
    cv2.imshow("Corrected Region", corrected_region)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 监听指定文件夹,处理新传入的照片
def monitor_folder(folder_path):
    processed_files = set()
    while True:
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                if file.lower().endswith(('.png', '.jpg', '.jpeg')):
                    file_path = os.path.join(root, file)
                    if file_path not in processed_files:
                        print(f"处理新照片: {file_path}")
                        process_image(file_path)
                        processed_files.add(file_path)
        time.sleep(1)

if __name__ == "__main__":
    # 替换为实际的照片文件夹路径
    folder_path = "path/to/your/photos"
    monitor_folder(folder_path)

代码解释

  1. background_processing 函数:对图像进行高斯模糊、边缘检测和轮廓查找,创建掩码并应用到原始图像上,去除背景干扰。
  2. find_most_uniform_region 函数:将图像分割成小区域,计算每个区域的颜色方差,选择方差最小的区域作为颜色最均匀的区域。
  3. color_correction 函数:计算图像的平均颜色,与标准颜色进行比较,计算校正系数并应用到图像上。
  4. extract_rgb_values 函数:计算颜色最均匀区域的平均 RGB 值。
  5. process_image 函数:读取图像,依次调用背景处理、识别颜色最均匀的区域、色彩校正和提取 RGB 值的函数,并显示处理后的图像。
  6. monitor_folder 函数:监听指定文件夹,当有新照片传入时,调用 process_image 函数进行处理。

注意事项

  • 请将 folder_path 替换为实际的照片文件夹路径。
  • 色彩校正部分的标准颜色可以根据实际情况进行调整。
  • 代码中的网格大小 grid_size 可以根据图像的实际情况进行调整。
;