1、
转换为灰度图:
cvtColor(src, dst, CV_RGB2GRAY);
2、
膨胀,腐蚀
:
Mat dilateElement = getStructuringElement(MORPH_RECT, Size(
10
,
10
));
// 获得内核
dilate(img, img, dilateElement);
// 膨胀函数
Mat erodeElement = getStructuringElement(MORPH_RECT, Size(
10
,
10
));
// 获得内核
erode(img, img, erodeElement);
// 腐蚀函数
3、
Mat初始化
Mat M(
2
,
2
, CV_8UC3, cv::Scalar::all(
1
));
//前两个参数时指矩阵的行数和列数,
//第3个参数:数据类型
//第4个是对每个像素值赋初值,这个代码就是把每个通道的像素值都
//都赋值1.,如果是Scalsr(255,0,0),就是将255,0,0分别赋予每个像素点的3个通道。
4、
图像二值化
double
threshold(InputArray src, OutputArray dst,
double
thresh,
double
maxval,
int
type)
第三个参数,double类型的thresh,阈值的具体值。
第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.
第五个参数,int类型的type,阈值类型:
0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0
1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
4: THRESH_TOZERO_INV 当前点值大于阈值时,设置为0,否则不改变
5、
vecto
找vector最大值和第二大值
vector line_len_right;
if (line_len_right.size() != 0 )
{
//找出左边最大
vector<
double
>::iterator max_element
= max_element(begin(line_len_right
), end(line_len_right
));
double max_left_dis = *max_element;
//找出最大值的索引
index=
distance(begin(line_len_right
), max_element
);
//找出最小值及其索引
auto smallest = min_element(begin(line_len_right
), std::end(line_len_right
));
small_index=
distance(begin(line_len_right
), smallest);
//删除最大值,找出第二大值
vector::iterator iter = find(line_len_left.begin(), line_len_left.end(), max_left_dis);
if (iter != line_len_left.end())line_len_left.erase(iter);
double sec_max_left_dis = *max_element(line_len_right.begin(), line_len_left.end());
}
二维vector 定义和赋值
vector
int
>> a;
//构造一个3*2的 二维容器数组
vector<
int
> a0;
a0.push_back(00);
a0.push_back(01);
vector<
int
> a1;
a1.push_back(00);
a1.push_back(01);
vector<
int
> a2;
a2.push_back(00);
a2.push_back(01);1
a.push_back(a0);
a.push_back(a1);
a.push_back(a2);
6、
查看程序运行时间
#include
double
t = (
double
)cvGetTickCount();
//。。。。。。算法或程序代码
t = (
double
)cvGetTickCount() - t;
printf(
"processing time = %gms\n"
, t/(cvGetTickFrequency()*1000) );
//输出时间为ms
printf(
"processing time = %gs\n"
, t/(cvGetTickFrequency()*1000000) );
//输出时间为s
7、
旋转图片90度
Mat t, f;
transpose(Img, t);
flip(t, f, 1); //f就是旋转以后的图,包括长宽转换
8、
图片黑白像素转换
bitwise_not(HighPassImg, heightenImg);
9、
局部自适应二值化
Mat gray_Img;
cvtColor(dst, gray_Img, CV_RGB2GRAY);
int blockSize = 25;
int constValue = 10;
Mat local;
adaptiveThreshold(gray_Img, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);
10、统一图片尺寸
Mat dst; //目标图像指针
int width = 0;
int height = 0;
if ((img.rows + 10) < img.cols)
{
width = 400; //目标图像的宽为固定像素
height = 300;
}
else
{
width = 300; //目标图像的宽为固定像素
height = 400;
}
resize(img, dst, Size(width, height));