旋转图片并批量保存
因为手机拍照的角度问题,会使图片倾斜,
矫正它的程序为
// Demon.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <windows.h>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
using namespace cv;
void swap(unsigned char& a, unsigned char& b){//为什么要用unsigned?
char c = a;
a = b;
b = c;
}
int _tmain(int argc, _TCHAR* argv[])
{
string dir_path = "F:\\2345Do\\2\\";
char outDirName[50];
Directory dir;
string extenttype = "*.jpg";
vector<string> fileNames = dir.GetListFiles(dir_path, extenttype, false);
for (int item = 0; item < fileNames.size(); item++)
{
//get image name
string fileName = fileNames[item];
string fileFullName = dir_path + fileName;
//cout << "File name:" << fileName << endl;
cout << "Full path:" << fileFullName << endl;
cv::Mat img = cv::imread(fileFullName);
int w = img.cols;
int h = img.rows;
for (int i = 0; i < w; i++){
for (int j = 0; j < h; j++){
int I = h - 1 - j;
int J = i;
while ((i*h + j)>(I*w + J)){
int p = I*w + J;
int tmp_i = p / h;
int tmp_j = p%h;
I = h - 1 - tmp_j;
J = tmp_i;
}
swap(*(img.data + i*h * 3 + j * 3 + 0), *(img.data + I*w * 3 + J * 3 + 0));
swap(*(img.data + i*h * 3 + j * 3 + 1), *(img.data + I*w * 3 + J * 3 + 1));
swap(*(img.data + i*h * 3 + j * 3 + 2), *(img.data + I*w * 3 + J * 3 + 2));
}
}
img.cols = h;
img.rows = w;
img.step = h * 3;
/*cv::imshow("rotimg", img);
cv::waitKey();*/
sprintf_s(outDirName, "F:\\2345Do\\rotImg\\%03d.jpg", item);
imwrite(outDirName, img);
}
return 0;
}
保存为灰度图像
// Demon.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <windows.h>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
using namespace cv;
void swap(unsigned char& a, unsigned char& b){//为什么要用unsigned?
char c = a;
a = b;
b = c;
}
int _tmain(int argc, _TCHAR* argv[])
{
string dir_path = "F:\\2345Do\\2\\";
char outDirName[50];
Directory dir;
string extenttype = "*.jpg";
vector<string> fileNames = dir.GetListFiles(dir_path, extenttype, false);
for (int item = 0; item < fileNames.size(); item++)
{
//get image name
string fileName = fileNames[item];
string fileFullName = dir_path + fileName;
//cout << "File name:" << fileName << endl;
cout << "Full path:" << fileFullName << endl;
cv::Mat img = cv::imread(fileFullName);
int w = img.cols;
int h = img.rows;
for (int i = 0; i < w; i++){
for (int j = 0; j < h; j++){
int I = h - 1 - j;
int J = i;
while ((i*h + j)>(I*w + J)){
int p = I*w + J;
int tmp_i = p / h;
int tmp_j = p%h;
I = h - 1 - tmp_j;
J = tmp_i;
}
swap(*(img.data + i*h * 3 + j * 3 + 0), *(img.data + I*w * 3 + J * 3 + 0));
swap(*(img.data + i*h * 3 + j * 3 + 1), *(img.data + I*w * 3 + J * 3 + 1));
swap(*(img.data + i*h * 3 + j * 3 + 2), *(img.data + I*w * 3 + J * 3 + 2));
}
}
img.cols = h;
img.rows = w;
img.step = h * 3;
Mat grayImg;
cvtColor(img, grayImg, CV_BGR2GRAY);
/*cv::imshow("rotimg", grayImg);
cv::waitKey();*/
sprintf_s(outDirName, "F:\\2345Do\\grayImg\\%03d.jpg", item);
imwrite(outDirName, grayImg);
}
return 0;
}
参考
图像翻正以及原地(不开辟新空间)顺时旋转90度问题 - CSDN博客
http://blog.csdn.net/u011463646/article/details/78165583