Python-opencv绘制图像检测框和分割区域

图像标注绘制

绘制图像检测框
绘制图像分割区域
cv2.rectangle(img, (x,y), (x+w,y+h), (127,127,127), 2) 
#绘制矩形 img:原图; (x,y):矩阵的左上点坐标; (x+w,y+h):矩阵的右下点坐标; (0,255,0):

绘制折线或多边形 cv.polylines 函数说明
 cv2.fillPoly()函数可以用来填充任意形状的图型.可以用来绘制多边形
   fillPoly是OpenCV库中的一个函数,用于在图像上绘制一个填充的多边形
   
    vertices = np.array([[(left,0),(left,ny), (right,ny),(right,0)]], dtype=np.int32)
 ignore_mask_color=(255,255,255)
 cv2.fillPoly(mask, vertices, ignore_mask_color)

代码示例

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import json
from pathlib import Path
import cv2


if __name__ == "__main__":
    """opencv 在图像上标注检测 box 和文字 detect"""
    img_dir = r"F:\data\imgs"
    file_name = r"F:\data\json\site_my.txt"
    blue = (255, 0, 0)
    mark_font = cv2.FONT_HERSHEY_SCRIPT_COMPLEX
    with open(file_name, mode="r", encoding="utf-8") as file_obj:
        for i, data in enumerate(file_obj):
            # JSON字符串转py对象
            json_str = json.loads(data)
            img_nm = json_str["img_key"]
            img_path = str(Path(img_dir).joinpath(img_nm))
            print(img_path)
            img = cv2.imread(img_path)
            # 对图像进行mark
            for idx, mark_point in enumerate(json_str["ccle"]):
                # list中所有数值类型转换,且数据类型tuple
                point = tuple(map(int, mark_point["ata"]))
                category = mark_point["trs"]["ory"]
                cv2.rectangle(img=img, pt1=point[0:2], pt2=point[2:4], color=blue, thickness=0)
                cv2.putText(img=img, text=category, org=point[0:2], fontFace=mark_font, fontScale=0.5, color=(0, 0, 255))
            cv2.imshow(winname="My_test_img", mat=img)
            cv2.waitKey(delay=1000)
            cv2.destroyWindow(winname="My_test_img")
            output = str(Path(img_dir).joinpath("img_"+str(i)+".jpg"))
            print(output)
            cv2.imwrite(filename=output, img=img)

分割代码示例

import os.path
import cv2
import numpy as np

img_dir = r"F:\data\train_seg"
img_path= os.path.join(img_dir,"Camera01.jpg")
mark_frame = cv2.imread(img_path).copy()
print(mark_frame.shape)
mark_frame_org = cv2.imread(img_path).copy()
item_parsers = [[330, 500], [600, 120], [760, 530], [470, 630], [300, 580]]
view_color = (110, 0, 255)
triangle = np.array(item_parsers, np.int32)
mask_frame = cv2.fillConvexPoly(mark_frame, triangle, view_color)
dst = cv2.addWeighted(mark_frame_org, .2, mask_frame, .5, 0)
cv2.imshow("my",dst)
cv2.waitKey(delay=0)  

参考

python3 , opencv 在图像上标注检测 box 和文字https://blog.csdn.net/tutu96177/article/details/87783857
posted @ 2021-08-19 20:49  辰令  阅读(1182)  评论(0)    收藏  举报