使用opencv实现将图片从多个文件夹重新命名后放在一个文件夹中的代码

import time
import matplotlib.pyplot as plt
import os
path="F:\\helmetDetection_image\\alarm1"#多个文件夹的父文件夹
import cv2
def readPath(path):
    for filename in os.listdir(path):
        p=path+'\\'+filename
        if(os.path.isdir(p)):#判断是否是文件夹,是就迭代寻找文件
            readPath(p)
        elif(os.path.isfile(p)):#当是文件的时候,将其转换为正常图片 ,并写入到指定文件夹下
            img = plt.imread(p)
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 格式转换,因为python读图片是BGR形式,我们要将其转换成RGB形式,正常颜色(必须有)
            cv2.imwrite("F:\\helmetDetection_image\\alarms\\" + str(time.time()) + ".jpg", img)#重新命名
            print(p)
            # cv2.imshow("person_old_frame", img)
            # cv2.waitKey(0)

if __name__ == '__main__':
    readPath(path)

关于图片显示格式问题,可参考关于opencv读取图片时,颜色发生变化后,如何修改?。也非常感谢该链接解决我的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 OpenCV 读取多个图片并完成棋盘格标定的 C++ 代码示例: ```c++ #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 定义棋盘格大小和个数 Size boardSize(9, 6); int boardNum = 20; // 定义棋盘格角点坐标 vector<vector<Point3f>> objPoints; vector<vector<Point2f>> imgPoints; // 生成棋盘格角点坐标 vector<Point3f> obj; for(int i = 0; i < boardSize.height; i++) { for(int j = 0; j < boardSize.width; j++) { obj.push_back(Point3f(j, i, 0)); } } for(int i = 0; i < boardNum; i++) { objPoints.push_back(obj); } // 读取多个图片并提取角点 for(int i = 1; i <= boardNum; i++) { // 读取图片 string filename = "path/to/images/" + to_string(i) + ".jpg"; Mat image = imread(filename); // 转换为灰度图 Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); // 提取角点 vector<Point2f> corners; bool found = findChessboardCorners(gray, boardSize, corners); if(found) { // 亚像素精细化 cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 30, 0.1)); // 存储角点 imgPoints.push_back(corners); // 可视化角点 drawChessboardCorners(image, boardSize, corners, found); imshow("corners", image); waitKey(0); } } // 标定相机 Mat cameraMatrix, distCoeffs; vector<Mat> rvecs, tvecs; calibrateCamera(objPoints, imgPoints, Size(640, 480), cameraMatrix, distCoeffs, rvecs, tvecs); // 打印标定结果 cout << "camera matrix:\n" << cameraMatrix << endl; cout << "distortion coefficients:\n" << distCoeffs << endl; return 0; } ``` 在代码,我们首先定义了棋盘格的大小和个数,并生成了棋盘格角点的坐标。然后,我们使用 `findChessboardCorners()` 函数在读取的每个图片寻找棋盘格角点,并使用 `cornerSubPix()` 函数进行亚像素精细化。找到的角点存储在 `imgPoints` 。我们还使用 `drawChessboardCorners()` 函数可视化了角点,以便检查是否正确提取。最后,我们使用 `calibrateCamera()` 函数对相机进行标定,并打印标定结果。 需要注意的是,我们需要将图片存储在一个文件夹,并且按照顺序进行命名(例如,1.jpg、2.jpg、3.jpg 等)。同时,我们还需要将棋盘格图案的长宽比例(即棋盘格大小)与实际棋盘格大小匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值