[C++]读取文件夹中图片,并灰度化

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/ml/ml.hpp>

#include "cv.h"
#include "highgui.h"
#include <cstdio>

using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	ifstream Test("negatives/infofile.txt");
	string ImgName;//图片名(绝对路径)
	for (int num = 0; getline(Test, ImgName); num++)
	{
		cout << "Processing:" << ImgName << endl;
		Mat src = imread(ImgName);//读取图片
		Mat src_gray;
		//Mat src = imread("lena.jpg");
		if (!src.data)
		{
			return -1;
		}
		cvtColor(src, src_gray, CV_RGB2GRAY);
		stringstream ss;
		string Img1;
		ss << num;
		ss >> Img1;
		Img1 = Img1 + "ImgProcessed.bmp";
		imwrite(Img1, src_gray);
	}
}

 

读取文件夹下所有图片,可以使用OpenCV中的`cv::glob`函数,该函数可以根据通配符模式匹配指定目录下的所有文件。具体步骤如下: 1. 使用`cv::glob`函数获取指定目录下的所有图像文件路径。 2. 按顺序读取每一张图像,计算对应点的运动,绘制轨迹。 下面是一个代码示例: ```c++ #include <iostream> #include <string> #include <vector> #include <opencv2/opencv.hpp> int main() { // 指定图像文件夹路径 std::string image_folder = "path/to/image/folder"; // 获取图像文件路径 std::vector<cv::String> image_paths; cv::glob(image_folder, image_paths); // 定义关键点和颜色 std::vector<cv::Point2f> prev_keypoints, curr_keypoints; cv::Scalar prev_color = cv::Scalar(0, 0, 255), curr_color = cv::Scalar(0, 255, 0); // 读取第一张图像 cv::Mat prev_image = cv::imread(image_paths[0]); cv::cvtColor(prev_image, prev_image, cv::COLOR_BGR2GRAY); cv::goodFeaturesToTrack(prev_image, prev_keypoints, 500, 0.01, 10); // 遍历每一张图像 for (int i = 1; i < image_paths.size(); i++) { // 读取当前帧图像 cv::Mat curr_image = cv::imread(image_paths[i]); cv::cvtColor(curr_image, curr_image, cv::COLOR_BGR2GRAY); // 计算光流 std::vector<uchar> status; std::vector<float> err; cv::calcOpticalFlowPyrLK(prev_image, curr_image, prev_keypoints, curr_keypoints, status, err); // 绘制轨迹 for (int j = 0; j < prev_keypoints.size(); j++) { if (status[j]) { cv::line(curr_image, prev_keypoints[j], curr_keypoints[j], curr_color, 2); } } // 更新关键点和颜色 prev_keypoints = curr_keypoints; prev_color = curr_color; // 重新检测关键点 cv::goodFeaturesToTrack(curr_image, curr_keypoints, 500, 0.01, 10); // 更新上一帧图像 prev_image = curr_image.clone(); } return 0; } ``` 在上面的代码中,我们使用了`cv::goodFeaturesToTrack`函数来检测关键点,使用`cv::calcOpticalFlowPyrLK`函数计算对应点的运动,使用`cv::line`函数绘制轨迹。注意,为了方便绘制轨迹,我们将图像从灰度图转换为了彩色图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值