Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出

简介: 这篇博客介绍了如何使用OpenCV库在Python中将图片保存到指定目录,以及如何将文件夹中的所有图片读取并以数组形式输出。

1.图片保存在指定目录

在opencv中用于保存图片所用到的语句是cv2.imwrite(filepath,image)
filepath是用于保存的地址路径(可用绝对和相对路径),此路径必须真实存在。如果不存在,则可以通过os模块创建,也就是说在后面一排加上os.makedirs(os.path.dirname(filename), exist_ok=True),这里的filename指的是filepath指向的文件。

1.1实际实例

import cv2
import os
import numpy as np

class TestLoader:
    # imdb image_path(list)
    def __init__(self, imdb, batch_size=1, shuffle=False):
        self.imdb = imdb
        self.batch_size = batch_size
        self.shuffle = shuffle
        self.size = len(imdb)  # num of data
        # self.index = np.arange(self.size)

        self.cur = 0
        self.data = None
        self.label = None

        self.reset()
        self.get_batch()

    def reset(self):
        self.cur = 0
        if self.shuffle:
            # shuffle test image
            np.random.shuffle(self.imdb)

    def iter_next(self):
        return self.cur + self.batch_size <= self.size

    # realize __iter__() and next()--->iterator
    # return iter object
    def __iter__(self):
        return self

    def __next__(self):
        return self.next()

    def next(self):
        if self.iter_next():
            self.get_batch()
            self.cur += self.batch_size
            return self.data
        else:
            raise StopIteration

    def getindex(self):
        return self.cur / self.batch_size

    def getpad(self):
        if self.cur + self.batch_size > self.size:
            return self.cur + self.batch_size - self.size
        else:
            return 0

    def get_batch(self):
        imdb = self.imdb[self.cur]
        '''
        cur_from = self.cur
        cur_to = min(cur_from + self.batch_size, self.size)
        #picked image
        imdb = [self.imdb[self.index[i]] for i in range(cur_from, cur_to)]
        # print(imdb)
        '''
        # print type(imdb)
        # print len(imdb)
        # assert len(imdb) == 1, "Single batch only"
        im = cv2.imread(imdb)
        self.data = im

path = "F:/Dataset/MTCNN_DATA/test/" # 保存测试图片的地方
gt_imdb=[]
for item in os.listdir(path):
    gt_imdb.append(os.path.join(path,item))
test_data = TestLoader(gt_imdb)

count = 0
for imagepath in gt_imdb:
    print(imagepath)
    image = cv2.imread(imagepath)
    save_path = 'D:/pycharm/test/'   # 图片保存的路径
    count += 1
    cv2.imwrite(save_path+'%d.jpg'%(count),image)
    # os.path.dirname(path)
    # 语法:os.path.dirname(path)
    # 功能:去掉文件名,返回目录
    os.makedirs(os.path.dirname(save_path),exist_ok=True)

运行结果:
在这里插入图片描述
在这里插入图片描述

2.文件夹里所有图片以数组形式输出

2.1实际代码

import os
import cv2
import numpy as np
def read_pic(path):
    if os.path.exists(path):
        print(1)
    else:
        print(2)
    dirnames = sorted(os.listdir(path))
    # print(dirname)
    n = len(dirnames)
    print(n)
    # f = open('neg.txt', 'w')
    Srcimg= []
    for dirname in dirnames:
        # print("正在读取第%d张图片" % i)
        # fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改,indecode下中文路径也可以运行
        img = cv2.imdecode(np.fromfile(path + dirname, dtype=np.uint8), -1)
        #####保存图片#########

        cv2.imwrite(output_path + "/" + dirname, img)
        img_path = os.path.join(input_path, dirname)
        # f.write(img_path+'\n')
        Srcimg.append(img)
        # cv2.imshow('pic',img)
        # cv2.waitKey(0)
        # print(img_path)
    Srcimg = np.array(Srcimg)

    return Srcimg
if __name__ == '__main__':
    input_path='D:/pycharm/10kinds-light-face-detector-align-recognition-master/test/'
    output_path='D:/pycharm/compare_three_module/result/'
    Srcimg=read_pic(input_path)
    print(Srcimg)

运行结果
在这里插入图片描述

目录
相关文章
|
1天前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
11 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
2天前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
17 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
1天前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
14 1
|
2天前
|
计算机视觉 Python
Opencv学习笔记(七):如何根据opencv将BGR转换为HSV
使用OpenCV库在Python中将BGR图像转换为HSV颜色空间的两种方法:一种是直接使用cv2.cvtColor函数,另一种是手动实现RGB到HSV的转换。
6 0
Opencv学习笔记(七):如何根据opencv将BGR转换为HSV
|
2天前
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
17 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
2天前
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
17 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
2天前
|
计算机视觉 Python
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
这篇文章介绍了如何使用OpenCV和matplotlib将多张图像拼接成一张图进行输出,并比较了两者的效果和使用注意事项。
10 0
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
|
2天前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
23 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2天前
|
计算机视觉 Python
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
使用OpenCV库将一个文件夹内的所有彩色图片批量转换为灰度图,并提供了相应的Python代码示例。
11 0
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
|
1天前
|
计算机视觉 Python
Opencv学习笔记(十):opencv和base64之间的转换
本文介绍了如何使用Python和OpenCV库将图像在Base64编码和OpenCV可读格式之间进行转换。
6 0