opencv 3.0 常用函数 (2)

1寻找轮廓

     //创建轮廓
    vector vecHierarchy;
    vector> vecContours;
    //寻找外轮廓
    findContours(matSrc, vecContours, vecHierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE ,Point(0, 0)); 
    if( vecContours.empty() == 0 || vecHierarchy.empty() == 0 )
    {
          return FALSE;
     }

2寻找轮廓的外切矩形

     RotatedRect box = minAreaRect(vecContours[1]); 
     Point2f Point[4];
     box.points(Point);

3.轮廓填充

CV_FILLED为全部填充,如果需要填充某一个轮廓填写那个轮廓的id。

     drawContours(matSrc, vecContours , 0, Scalar(255), CV_FILLED);

4.Canny检测图像边缘

经典的Canny边缘检测算法通常都是从高斯模糊开始,到基于双阈值实现边缘连接结束。但是在实际工程应用中,考虑到输入图像都是彩色图像,最终边缘连接之后的图像要二值化输出显示,所以完整的Canny边缘检测算法实现步骤如下:1. 彩色图像转换为灰度图像2. 对图像进行高斯模糊3. 计算图像梯度,根据梯度计算图像边缘幅值与角度4. 非最大信号压制处理(边缘细化)5. 双阈值边缘连接处理6. 二值化图像输出结果

     Canny(matSrc ,matDes ,125, 350);

5.灰度直方图均衡化

     equalizeHist(MatSrc, MatSrc);

6. 垂直投影

     void VerticalProjection(const Mat& src, Mat& dst) 
     { 
         // accept only char type matrices 
         CV_Assert(src.depth() != sizeof(uchar)); 

         dst.create(1, src.cols, CV_32F); 

         int i, j; 
         const uchar* p; 
         float* p_dst = dst.ptr(0); 
         for(j = 0; j < src.cols; j++){ 
             p_dst[j] = 0; 
             for(i = 0; i < src.rows; i++){ 
                 p = src.ptr(i); 
                 p_dst[j] += p[j]; 
             } 
         } 
     }

7. 水平投影

     void HorizonProjection(const Mat& src, Mat& dst) 
     { 
         // accept only char type matrices 
         CV_Assert(src.depth() != sizeof(uchar)); 

         dst.create(src.rows, 1, CV_32F); 
     
         int i, j; 
         const uchar* p; 
         float* p_dst; 
         for(i = 0; i < src.rows; i++){ 
             p = src.ptr(i); 
             p_dst = dst.ptr(i); 
             p_dst[0] = 0; 
             for(j = 0; j < src.cols; j++){ 
                 p_dst[0] += p[j]; 
             } 
         } 
     } 

8.hough变换检测圆

     vector circles; 
     HoughCircles(matSrc, circles, CV_HOUGH_GRADIENT, 
                                    1, //累加器的分辨率(图像的尺寸/2) 
                                    6, //两个圆之间的最小距离 
                                    100, //Canny高阈值 
                                    5, //最小投票数 
                                    3,
                                    7); //极小极大半径3 10 

     vector::const_iterator itc = circles.begin();
     while(itc != circles.end())
     {
          ...
          i++;
     }

9. 调节对比度和亮度

dContrast为对比度参数,范围为10-100,iBright为亮度参数范围为0-255。

    matTmp.convertTo( matSrc, -1, dContrast, iBright);

10.画矩形

Point1,Point2为矩形对角的2个点。

rectangle(matSrc, Point1, Point2, Scalar( 0, 0, 0), CV_FILLED, 0);

11.画直线

Point1,Point2为直线上的2个点。

line( matSrc , Point1 , Point2 , Scalar( 0, 0, 0) );

12.画圆或者点

circle( matSrc, Point, 2, Scalar(255,0,0,0), CV_FILLED, CV_AA, 0);

你可能感兴趣的:(opencv 3.0 常用函数 (2))