opencv 批量处理图像

为了批量处理图像,网上找了好久,基本上都是C语言的sprinrf() 和 sprinrf_s()的方法;参数输入 只能是 char* 类型; 我下面献上C++的简洁方法。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <string>

using namespace cv;
using namespace std;

int main()
{
  Mat srcImage;
  Mat dstImage;
  Mat hsvImage;

  string fileName;

  char* filePath = "E:\\素材\\海外卡口四车道\\雷达4车道录像_晚上\\201603152002\\dir.txt";
  char* dir = "E:\\素材\\海外卡口四车道\\雷达4车道录像_晚上\\201603152002\\";

  ifstream inFile(filePath);
  if (!inFile.is_open())
  {
    cerr<<"Failed open file"<<endl;
    return -1;
  }

  Size sz;
  double scale = 0.25;

  while (getline(inFile, fileName))  //按行读取文件名
  {
    cout<<dir<<endl;
    cout<<fileName<<endl;

    string str = dir + fileName; //连接文件路径与文件名;

    cout<<str<<endl;

    srcImage = imread(str,1);  //读入图像
    if (!srcImage.data)
    {
      cout<<"Image is filed"<<endl;
      return -1;
    }
   sz.width = (int)(srcImage.cols * 0.25);
   sz.height = (int)(srcImage.rows * 0.25);

   dstImage.create(sz, srcImage.type());
   resize(srcImage, dstImage, sz);
   namedWindow(fileName,1);
   imshow(fileName,dstImage);
   moveWindow(fileName, srcImage.cols, 0);

   hsvImage.create(sz,dstImage.type());
   cvtColor(dstImage,hsvImage,CV_BGR2Lab);//RGB转换到Lab颜色空间
   imshow("hsv",hsvImage);

   waitKey(0);

   destroyWindow(fileName);
}

inFile.close();
return 0;
}

时间: 2024-10-10 18:34:46

opencv 批量处理图像的相关文章

OpenCV &mdash;&mdash; 矩阵和图像操作

cvAbs , cvAbsDiff , cvAbsDiffS cvAdd , cvAddS , cvAddWeighted(可添加权重) #include <cv.h> #include <highgui.h> int main(int argc,char** argv) { IplImage *s1,*s2; s1=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_COLOR); s2=cvLoadImage("test.

OpenCV优化:图像的遍历4种方式

OpenCV优化:图像的遍历4种方式 分类: 算法学习2014-04-13 23:43 1312人阅读 评论(0) 收藏 举报 opencv 目录(?)[+] OpenCV优化:图像的遍历4种方式 我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方式:at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板

使用matlab批量处理图像后在指定文件夹存储

使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jpg'); N=length(Files); Names={}; Images={}; for k=1:N Names{k}=Files(k).name; Images{k}=imread(['D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\' Names{k}]);

OpenCV 基础知识------图像创建、访问、转换

cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ); size 图像宽.高. depth 图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32

OpenCV(C++版)图像读取,创建,复制,保存,显示

http://blog.163.com/yuyang_tech/blog/static/21605008320132642254689/ 一个小例子: #include "stdafx.h" #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[])// { //读入图像 const char* imagename =

opencv高效访问图像像素(遍历像素的方法总结)

一.Accessingpixel values访问像素值.(用类自带的方法:方便,但效率不高) 1.      cv::Mat has the a templatemethod at(int y, int x) 用法image.at<cv::Vec3b>(j,i)[channel]= value; 注意事项:the programmer needs to specify the return type that is expected(需认为指定返回值类型),一般使用type cv::Vec3

OpenCV实现基于图像内容检索--视频播放(上)

最近要交个小作业,恰好刚开了博客园的博客,就想着把这个记下来当是做点笔记)=.=(,做的小作业的题目是基于图像内容的内容检索,主要是包括OpenCV和使用ActiveX插件两种方法来播放,这部分就写关于使用控件来实现视频播放的内容吧. [可能这几篇文章只是应用型的小作业,水平可能适合初学者看看,大牛略过就行] 开发环境: Win7+VS2012+OpenCV 1.首先,打开VS2012,文件-->新建-->项目-->MFC应用程序,输入项目"名称"为Video,点击&

OpenCV在MFC图像控件内显示图像

1.依照文章<OpenCV+MFC显示图像>,完毕配置. 2.创建对应的图像控件,button控件. 3.进行类型转换. 在当前OpenCV2版本号内,图像格式为cv::Mat ,而该格式无法直接在MFC内显示.因此,须要将其转换为能够在MFC内显示的CvvImage类格式,该类内有函数 DrawToHDC()支持MFC.试了一下无法直接实现,须要曲线救国.首先,将 格式cv::Mat变换为格式IplImage,再转换格式为 CvvImage. 还有问题,眼下openCV2版本号不再支持Cvv

《OpenCV:访问Mat图像中每个像素值》

图像容器Mat 还是先看Mat的存储形式.Mat和Matlab里的数组格式有点像,但一般是二维向量,如果是灰度图,一般存放<uchar>类型:如果是RGB彩色图,存放<Vec3b>类型. 单通道灰度图数据存放格式: 多通道的图像中,每列并列存放通道数量的子列,如RGB三通道彩色图: 注意通道的顺序反转了:BGR.通常情况内存足够大的话图像的每一行是连续存放的,也就是在内存上图像的所有数据存放成一行,这中情况在访问时可以提供很大方便.可以用 isContinuous()函数来判断图像