批处理函数和二值化函数

前言

图像批处理,管进不管出。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <time.h>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;

int main(){
string path = "/Users/cezarbao/Desktop/TestImages/*.bmp";
vector<Mat>images;
vector<String>srcImages;
glob(path,srcImages,false);
size_t cnt = srcImages.size();
for(int i = 0; i < cnt; i++)
{
images.push_back(imread(srcImages[i]));
//cvtColor(images[i],images[i],COLOR_BGR2GRAY);
//blur(images[i],images[i],Size(5,5));
threshold(images[i],images[i],170,255,THRESH_BINARY);
imshow("Image",images[i]);
waitKey(0);
}
}

一、glob()批处理函数

glob()函数可以批处理指定文件夹中的图像,函数目的是将pattern路径下的所用文件名存进&result中
函数原型:

1
void glob(String pattern, vector<String> &result, bool recursive = false)

第一个参数是文件夹的绝对路径
第二个参数是存放图片名称和路径的vector容器,需要注意的是该容器必须是OpenCV的String类
第三个参数默认是false,当recursive为false时,仅仅遍历指定文件夹内符合模式的文件,当recursive为true时,会同时遍历指定文件夹的子文件夹

二、threshold()二值化函数

函数原型:

1
2
3
4
5
6
7
double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
)

第一个参数和第二个参数分别为输入图像和输出图像
thresh参数表示阈值
maxval参数表示与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用设置的最大值。
type参数表示阈值类型:
1
2
3
4
5
type=CV_THRESH_BINARY //如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
type=CV_THRESH_BINARY_INV //如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.
type=CV_THRESH_TRUNC //如果 src(x,y)>threshold,dst(x,y) = max_value; 否则dst(x,y) = src(x,y).
type=CV_THRESH_TOZERO //如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。
type=CV_THRESH_TOZERO_INV //如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y)