当前位置: 首页 > article >正文

结合机器视觉与深度学习的 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 可以根据图像的实际情况进行调整。

http://www.kler.cn/a/532989.html

相关文章:

  • Mac M1 Comfyui 使用MMAudio遇到的问题解决?
  • 【大数据技术】教程03:本机PyCharm远程连接虚拟机Python
  • 基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)
  • 2000-2020年 儒家文化-儒学中心数据-社科数据
  • 【数据结构】(4) 线性表 List
  • git进阶--3---git pull和git fetch的区别与联系
  • fastDFS简介及应用
  • Node.js与嵌入式开发:打破界限的创新结合
  • Qt网络相关
  • 25.02.04 《CLR via C#》 笔记 13
  • Linux——ext2文件系统(二)
  • 亚博microros小车-原生ubuntu支持系列:21 颜色追踪
  • 安全实验作业
  • 【Hadoop】Hadoop的HDFS
  • Docker技术相关学习二
  • oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区
  • Tag注解
  • C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践
  • 2024.1版android studio创建Java语言项目+上传gitee
  • 解决带空格的字符串输入问题:C/C++中的几种常用函数
  • 网络原理(5)—— 数据链路层详解
  • 使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025
  • Verilog基础(一):基础元素
  • 用C语言实现一个Shell:Tutorial - Write a Shell in C
  • C语言:深入了解指针2(超详细)
  • LLMs瞬间获得视觉与听觉感知,无需专门训练:Meta的创新——在图像、音频和视频任务上实现最优性能。