opencv-python图像预处理后处理记录

2022-07-26,,,,

0. 保存可视化图像没必要太大

cv2.imwrite(os.path.join(argv.output_file, img['file_name']), cvImage,  [int(cv2.IMWRITE_JPEG_QUALITY), 30])

1.

        image_array = cv2.imread(img_name, -1)
        if image_array.ndim == 2:
            image_array = cv2.cvtColor(image_array, cv2.COLOR_GRAY2BGR)
        image = Image.fromarray(image_array.astype('uint8')).convert('RGB')

空数组 最重要的还是shape=(0,5),其实ones也可以

temp = np.empty(shape=(0,5), dtype=np.float32)

关于空数组的使用,参考某一段代码:

出自github项目hpatches-benchmark

from utils.hpatch import *
import cv2
import os.path


# all types of patches
tps = ['ref','e1','e3','e5','h1','h3','h5','t1','t3','t5']
datadir = '/home/boyun/deepglint/ImageMatch_dataset/data'
#datadir = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "data"))

def vis_patches(seq,tp,ids):
    """Visualises a set of types and indices for a sequence"""
    h = len(tp)*65
    vis = np.empty((h, 0))
    # add the first column with the patch type names
    vis_tmp = np.empty((0,55))
    for t in tp:
        tp_patch = 255*np.ones((65,55))
        cv2.putText(tp_patch,t,(5,25),cv2.FONT_HERSHEY_DUPLEX , 1,0,1)
        vis_tmp = np.vstack((vis_tmp,tp_patch))
    vis = np.hstack((vis,vis_tmp))
    # add the actual patches
    for idx in ids:
        vis_tmp = np.empty((0,65))
        for t in tp:
            vis_tmp = np.vstack((vis_tmp,get_patch(seq,t,idx)))
        vis = np.hstack((vis,vis_tmp))
    return vis


# select a subset of types of patches to visualise
# tp = ['ref','e5','h5','t5']
#or visualise all - tps holds all possible types
tp = tps

# list of patch indices to visualise
ids = range(1,55)

# load a sample sequence
seq = hpatch_sequence(os.path.join(datadir, "hpatches-release", "v_calder"))
vis = vis_patches(seq,tp,ids)

# show
cv2.imshow("HPatches example", vis/255)
cv2.waitKey(0)

# or save
cv2.imwrite("patches.png", vis)

 

2.

import os
import shutil
import numpy as np
import pcl
import cv2

def searchDirFile(rootDir, list_, path_):
    for dir_or_file in os.listdir(rootDir):
        filePath = os.path.join(rootDir, dir_or_file)
        if os.path.isfile(filePath):
            if os.path.basename(filePath).endswith('_DepthMap.tif'):
                temp = filePath.split('/')[-2]
                list_.append(temp)
                path_.append(filePath)
                #print(temp)
            else:
                continue
        elif os.path.isdir(filePath):
            searchDirFile(filePath, list_, path_)
        else:
            print('not file and dir '+os.path.basename(filePath))

path = "/home/dataset/"
namelist = []
pathlist = []
searchDirFile(path, namelist, pathlist)

or

import os
import cv2
import numpy as np

def searchDirFile(rootDir, list_, path_, endswith_):
    for dir_or_file in os.listdir(rootDir):
        filePath = os.path.join(rootDir, dir_or_file)
        if os.path.isfile(filePath):
            if os.path.basename(filePath).endswith(endswith_):
                temp = filePath.split('/')[-2]
                list_.append(temp)
                path_.append(filePath)
            else:
                continue
        elif os.path.isdir(filePath):
            searchDirFile(filePath, list_, path_, endswith_)
        else:
            print('not file and dir '+os.path.basename(filePath))

path = "/home/dataset"
namelist = []
pathlist = []
endswith = 'Texture_8Bit.png'
searchDirFile(path, namelist, pathlist, endswith)

 

3

# -- coding: utf-8 --
import os
import sys
import shutil
import numpy as np
from pathlib2 import Path

if __name__ == '__main__':

    lines = '**********'

    out_dir = './select_data'
    if not os.path.exists(out_dir):
        os.makedirs(out_dir)

    # 数据地址
    before_dir = os.path.abspath(os.path.join(os.getcwd(), ".."))

    save_index = 200
    num = 0
    for dir_or_file in os.listdir(before_dir):
        num += 1
        print(num, "/", len(os.listdir(before_dir)))

        filePath = os.path.join(before_dir, dir_or_file)
        # 判断是否为文件
        if os.path.isfile(filePath):
            continue
        # 判断是否为目录
        elif os.path.isdir(filePath):
            sub_filePath1 = os.path.join(filePath, "Disk1")
            sub_filePath2 = os.path.join(filePath, "Disk2")
            if Path(sub_filePath1).exists() and Path(sub_filePath2).exists():
                for device_id_path in [sub_filePath1, sub_filePath2]:
                    for file in os.listdir(device_id_path):
                        m_id = file.split('-')
                        sub_id = "{}-{}-{}-{}".format(m_id[1],m_id[2],m_id[3],m_id[4])
                        id =  "{}-{}-{}-{}-{}".format(m_id[0],m_id[1],m_id[2],m_id[3],m_id[4])
                        if sub_id == lines:
                            subsubFilePath = os.path.join(device_id_path, file)

                            currentPng = os.path.join(subsubFilePath, 'OtherSampleFrame_IMG_Texture_8Bit.png')
                            currentTif = os.path.join(subsubFilePath, 'OtherSampleFrame_IMG_DepthMap.tif')
                            if Path(currentPng).exists() and Path(currentTif).exists():

                                shutil.copy(currentPng, os.path.join(out_dir, id+"_{:0>5d}_".format(save_index)+"OtherSampleFrame_IMG_Texture_8Bit.png"))
                                save_index += 1
                                #print(save_index)

4

python float 精度问题 和opencv-cpp有出入

# python的round函数将0.5向上入,OpenCV的cvRound函数将0.5向下舍
def cvRound(value):
    fractpart, intpart = math.modf(value)
    flag1 = (math.fabs(fractpart) < 0.50)
    if flag1:
        return int(intpart)
    else:
        return int(value + (0.5 if value >= 0 else -0.5))

def cut(num, c):
    str_num = str(num)
    return float(str_num[:str_num.index('.') + 1 + c])

 

本文地址:https://blog.csdn.net/baidu_40840693/article/details/110877503

《opencv-python图像预处理后处理记录.doc》

下载本文的Word格式文档,以方便收藏与打印。