コード例 #1
0
ファイル: autogui.py プロジェクト: XLPRUtils/pyxllib
    def update_loclabel_img(self, loclabel, img, *, if_exists='update'):
        """ 添加一张图片数据

        :param if_exists:
            update,更新
            skip,跳过,不更新
        """
        loc, label = os.path.split(loclabel)
        h, w = img.shape[:2]

        # 1 如果loc图片不存在,则新建一个jpg图片
        update = True
        if loc not in self.data or not self.data[loc]:
            imfile = xlcv.write(img, File(loc, self.root, suffix='.jpg'))
            self.imfiles[loc] = imfile
            shape = LabelmeDict.gen_shape(label, [[0, 0], [w, h]])
            self.data[loc][label] = self.parse_shape(shape)
        # 2 不存在的标签,则在最后一行新建一张图
        elif label not in self.data[loc]:
            image = xlcv.read(self.imfiles[loc])
            height, width = image.shape[:2]
            assert width == w  # 先按行拼接,以后有时间可以扩展更灵活的拼接操作
            # 拼接,并重新存储为图片
            image = np.concatenate([image, img])
            xlcv.write(image, self.imfiles[loc])
            shape = LabelmeDict.gen_shape(label,
                                          [[0, height], [width, height + h]])
            self.data[loc][label] = self.parse_shape(shape)
        # 3 已有的图,则进行替换
        elif if_exists == 'update':
            image = xlcv.read(self.imfiles[loc])
            [x1, y1, x2, y2] = self.data[loc][label]['ltrb']
            image[y1:y2, x1:x2] = img
            xlcv.write(image, self.imfiles[loc])
        else:
            update = False

        if update:  # 需要实时保存到文件中
            self.write(loc)
コード例 #2
0
    def __init__(self,
                 winname=None,
                 *,
                 imgproc=None,
                 img=None,
                 flags=1,
                 verbose=0,
                 delay=100):
        """
        Args:
            winname: 窗口名可以不输入,可以从func获取,或者有默认窗口名
            imgproc: 有时候明确要对指定的函数进行可视化分析
            img: 图片可以不输入,可以内置一个图片
            flags: 0 窗口可以调节大小,1 窗口按照图片大小固定
            verbose: 0 静默模式,1 显示每次运行时间,2 显示每次运行时间及参数值
            delay: 有时候改动滑动条,并不想立即生效,可以设置延时,这里单位是ms
                即如果delay时间段内已经有执行过回调函数,会避免重复执行
        """

        if winname is None:
            if imgproc:
                winname = imgproc.__name__
            else:
                winname = 'TrackbarTool'

        if img is None:
            img = np.zeros([500, 100, 3], dtype='uint8')
        else:
            img = xlcv.read(img)

        self.winname = winname
        self.img = img
        cv2.namedWindow(winname, flags)
        cv2.imshow(winname, self.img)

        self.imgproc = imgproc
        self.trackbar_names = {}

        self.verbose = verbose

        self.delay = delay
        self.last_run_time = 0
コード例 #3
0
    def get_img_buffer(cls, in_, *, rgba2rgb=False):
        """ 获取in_代表的图片的二进制数据

        :param in_: 可以是本地文件,也可以是图片url地址,也可以是Image对象
            注意这个函数,输入是url,也会获取重置图片数据上传
            如果为了效率明确只传url,可以用aip.AipOcr原生的相关url函数
        :return: 返回图片文件二进制值的buffer
        """

        # 1 取不同来源的数据
        if is_url(in_):
            im = xlcv.read_from_url(in_)
        else:
            im = xlcv.read(in_)

        # 2 特定的格式转换
        if rgba2rgb:
            im = cv2.cvtColor(im, cv2.COLOR_BGRA2BGR)
        buffer = xlcv.to_buffer(im)
        return buffer
コード例 #4
0
def test_adaptiveThreshold(img=None):
    """ 滑动条工具使用方法的示例 """
    # 1 图片可以传入路径,这里做一个随机图片
    if img is None:
        img = np.random.randint(0, 255, [500, 200], dtype='uint8')
    else:
        img = xlcv.read(img, 0)  # 确保是单通道灰度图

    # 2 指定要分析的函数
    t = TrackbarTool(imgproc=cv2.adaptiveThreshold,
                     img=img,
                     verbose=2,
                     delay=100)
    t.create_trackbar('maxValue', 255, 255)  # 添加滑动条:名称,最大值,默认值
    # 创建滑动条过程中,可能会报错,因为参数还不全,指定的imgproc还无法运行,可以先不用管
    t.create_trackbar('adaptiveMethod', 10, 0)
    t.create_trackbar('thresholdType', 10, 1)
    t.create_trackbar('blockSize', 100, 11)
    t.create_trackbar('C', 20, 3)
    # t.imshow(img2)  # 临时显式其他图片处理效果。如果需要持久修改,可以更改self.img的值
    cv2.waitKey()
コード例 #5
0
ファイル: autogui.py プロジェクト: XLPRUtils/pyxllib
    def __init__(self, root):
        """
        data:dict
            key: 相对路径/图片stem (这一节称为loc)
                label名称:对应属性dict1 (跟loc拼在一起,称为loclabel)
                label2:dict2
        """
        self.root = Dir(root)
        self.data = defaultdict(dict)
        self.imfiles = {}

        for file in self.root.select_files('**/*.json'):
            lmdict = file.read()
            imfile = file.with_name(lmdict['imagePath'])
            img = xlcv.read(imfile)
            loc = file.relpath(self.root).replace('\\', '/')[:-5]
            self.imfiles[loc] = imfile

            for shape in lmdict['shapes']:
                attrs = self.parse_shape(shape, img)
                self.data[loc][attrs['label']] = attrs