|
10鱼币
使用python写一个相关的代码
求助各位大佬帮小弟这个忙 ,要求如下:
1.输入一张图片,自动识别其中除黑色(0,0,0)(RGB值)外其他颜色的RGB值;
2.计算其他颜色的像素个数并进行比较;
3.将比较后的数据投入判断循环:
若0<a<=0.1,输出为0,
若0.1<a<=0.2,输出为1,
若0.2<a<=0.5,输出为2,
若0.5<a<=1,输出为3。
注:a为比值
实际上主要是前两点,个人理解识别颜色RGB值的包应该调用opencv,numpy等,但具体代码因本人水平有限,需要大佬提供参考一下 ,不胜感激!
附示例图:
如上图,计算橙色(170,85,0)像素数量占橙色和绿色(0,85,0)总像素数的比值,黑色属于背景,不计入其中;随后投入一个判断循环,判断比值属于哪个级别。
本帖最后由 isdkz 于 2023-4-12 16:21 编辑
以下是修改后的代码,将每张图片的输出结果以白色文本形式呈现在相应图片的左下角:
- import cv2
- import numpy as np
- import os
- def count_pixels(img, color_lower, color_upper):
- mask = cv2.inRange(img, color_lower, color_upper)
- return np.sum(mask == 255)
- def calculate_ratio(orange_count, green_count):
- total_count = orange_count + green_count
- if total_count == 0:
- return 0
- return orange_count / total_count
- def judge_level(ratio):
- if 0 < ratio <= 0.1:
- return 0
- elif 0.1 < ratio <= 0.2:
- return 1
- elif 0.2 < ratio <= 0.5:
- return 2
- elif 0.5 < ratio <= 1:
- return 3
- def add_text_to_image(img, text, position):
- font = cv2.FONT_HERSHEY_SIMPLEX
- font_scale = 1
- font_thickness = 2
- font_color = (255, 255, 255) # 白色
- cv2.putText(img, text, position, font, font_scale, font_color, font_thickness, cv2.LINE_AA)
- def process_image(image_path):
- # 读取图片
- img = cv2.imread(image_path)
- # 设置颜色范围(使用BGR顺序)
- orange_lower = np.array([0, 84, 169], dtype=np.uint8)
- orange_upper = np.array([1, 86, 171], dtype=np.uint8)
- green_lower = np.array([0, 84, 0], dtype=np.uint8)
- green_upper = np.array([1, 86, 1], dtype=np.uint8)
- # 计算橙色和绿色像素数量
- orange_count = count_pixels(img, orange_lower, orange_upper)
- green_count = count_pixels(img, green_lower, green_upper)
- # 计算橙色像素数量占比
- ratio = calculate_ratio(orange_count, green_count)
- # 判断比值属于哪个级别
- level = judge_level(ratio)
- # 将输出结果添加到图片的左下角
- height, width, _ = img.shape
- text_position = (10, height - 20)
- text = f"橙色: {orange_count}, 绿色: {green_count}, 比值: {ratio:.2f}, 级别: {level}"
- add_text_to_image(img, text, text_position)
- # 保存图片
- output_image_path = os.path.join("output", os.path.basename(image_path))
- cv2.imwrite(output_image_path, img)
- def main():
- # 图片文件夹路径
- image_folder = "path/to/your/image/folder"
- image_files = [os.path.join(image_folder, f) for f in os.listdir(image_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]
- # 创建输出文件夹
- if not os.path.exists("output"):
- os.mkdir("output")
- # 处理每张图片
- for image_path in image_files:
- process_image(image_path)
- if __name__ == "__main__":
- main()
复制代码
此代码将读取图片文件夹中的所有.jpg、.jpeg和.png图片,并处理每张图片。处理结果将以白色文本形式呈现在相应图片的左下角。处理过的图片将保存在与原始图片相同的文件名下,但位于名为"output"的新文件夹中。如果输出文件夹不存在,代码将自动创建一个。
请确保将image_folder变量设置为您的图片文件夹路径,并根据需要调整其他参数,例如字体、字体大小、字体颜色等。此代码将批量处理您的图片,并将带有结果标签的新图片保存到"output"文件夹中。
|
最佳答案
查看完整内容
以下是修改后的代码,将每张图片的输出结果以白色文本形式呈现在相应图片的左下角:
此代码将读取图片文件夹中的所有.jpg、.jpeg和.png图片,并处理每张图片。处理结果将以白色文本形式呈现在相应图片的左下角。处理过的图片将保存在与原始图片相同的文件名下,但位于名为"output"的新文件夹中。如果输出文件夹不存在,代码将自动创建一个。
请确保将image_folder变量设置为您的图片文件夹路径,并根据需要调整其他 ...
|