数据处理——图片

一.引言

   目前有很多常见的图像处理库,比如cv2,pillow等,OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,专门用于处理图像和视频。它提供了丰富的功能,广泛应用于实时图像处理、计算机视觉、机器学习和深度学习等领域。Pillow是Python Imaging Library (PIL)的一个分支,是Python中最常用的图像处理库之一。它功能简单易用,特别适合处理图像文件的读取、保存、转换和一些常见的图像编辑任务。

二.读取图片

  cv2

    img = cv2.imdecode(np.fromfile(image_path, dtype=np.uint8), 1)

pilow

img = Image.open('image.jpg')

还有一种不常见的,如果上面两种读不出来的图片有

              
import cv2
import imageio.v2 as imageio
import numpy as np
from PIL import Image, ImageFile
from tkinter.filedialog import askdirectory
ImageFile.LOAD_TRUNCATED_IMAGES = True
                # 尝试解码图片
                image = imageio.imread(out_mada_path)
                img_1 = np.array(image)
                # img = img[:, :, ::-1]  # 将BGR转为RGB
                img = cv2.cvtColor(img_1, cv2.COLOR_RGB2BGR)
三.给图片上mask和效果图,背景颜色不变
 groups = [obj['group'] for obj in js['objects'] if obj['label'] != 'background']

                    groups = sorted(list(set(groups)), key=lambda x: int(x))
                    group_index_dict = {group: index+1 for index, group in enumerate(groups)}

                    for group, index in group_index_dict.items():
                        mask_label1 = np.zeros((h, w), np.uint8)
                        mask_label2 = np.zeros((h, w), np.uint8)
                        mask_all = np.zeros((h, w, 3), np.uint8)
                        for obj in js['objects']:
                            pts = np.array(obj['polygon'], np.int32)
                            if group == obj['group']:
                                if obj['label'] == '1':
                                    cv2.fillPoly(mask_label1, [pts], color=255)
                                    cv2.fillPoly(mask_label2, [pts], color=0)
                                    cv2.fillPoly(mask_all, [pts], color=(0, 0, 255))
                                elif obj['label'] == '2':
                                    cv2.fillPoly(mask_label1, [pts], color=0)
                                    cv2.fillPoly(mask_label2, [pts], color=255)
                                    cv2.fillPoly(mask_all, [pts], color=(255, 0, 0))
                                else:
                                    cv2.fillPoly(mask_label1, [pts], color=0)
                                    cv2.fillPoly(mask_label2, [pts], color=0)
                                    cv2.fillPoly(mask_all, [pts], color=(0, 0, 0))
                            else:
                                cv2.fillPoly(mask_label1, [pts], color=0)
                                cv2.fillPoly(mask_label2, [pts], color=0)
                                cv2.fillPoly(mask_all, [pts], color=(0, 0, 0))
四.读取json信息绘制对应效果图

画框的函数

cv2.rectangle(img, (round(x0), round(y0)), (round(w), round(h)), color=(0, 255, 0), thickness=2)

给框上面写字

# 在矩形框上方绘制文本 "cat"
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    font_scale = 0.5
                    font_thickness = 2
                    font_color = (0, 0, 255)
                    text = "Cat"
                    text_size = cv2.getTextSize(text, font, font_scale, font_thickness)[0]
                    text_x = round(x0)
                    text_y = round(y0) - 5
                    if text_y < 0:
                        text_y = round(y0) + text_size[1] + 5
                    cv2.putText(img, text, (text_x, text_y), font, font_scale, font_color, font_thickness)

绘制关键点

 if shape_type == 'point':
                    select_point_index = obj_shape.get('shape_attribute', {}).get('selectPointIndex')
                    # 存储每个点的信息
                    for point in shape:
                        keypoints.extend([point.get('x', 0), point.get('y', 0)])
                        x = point.get('x', 0)
                        y = point.get('y', 0)
                        keypoints_info.append((x, y, select_point_index))  # 存储坐标和索引
                        visibility = 1 if obj_shape.get('shape_attribute', {}).get('pointAttrName') == '可见' else 2
                        visible.append(visibility)

                # 绘制关键点和显示 `select_point_index`
                for i, (x, y, select_point_index) in enumerate(keypoints_info):
                    color_points = (0, 255, 0) if visible[i] == 1 else (0, 255, 255)
                    cv2.circle(img, (int(x), int(y)), 5, color_points, -1)  # 绘制点
                    cv2.putText(img, str(select_point_index), (int(x), int(y) - 10), cv2.FONT_HERSHEY_SIMPLEX,
                                font_scale,
                                font_color, thickness)  # 显示正确的 `select_point_index`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值