opencv图像处理常用小程序

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));

你可能感兴趣的:(opencv)