通过opencv和vc++计算矩形内部的填充比

    Opencv的findContours函数只知道轮廓,和能够套紧的最小矩形,但是无法知道所套紧的矩形的填充比例,即矩形的面积与矩形内部前景面积的比例。

    该方法调用了一些opencv中与矩形相关的函数,例如:findContours、drawContours、cvBoxPoints等。

    实现手段:通过调用opencv中的findContours函数,找出图片中矩形的个数并记录矩形的坐标,然后,通过调用drawContours函数,将所找到矩形在新创建的全黑图像上进行1:1比例的逐一再现,最后计算全黑图像上的白点个数和矩形面积,得出填充比。代码包链接:https://download.csdn.net/download/zhaonan9523/11189662

过程如下:

#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
#include 

using namespace cv;
using namespace std;
using namespace zbar;

int main()
{
    int c_size, i, m, n;
    CvBox2D rect[10];
    CvPoint2D32f rectpoint[4];
    vector > contours;
    Mat srcimage = imread("..\\2.jpg");
    Mat image;
    cvtColor(srcimage, image, CV_BGR2GRAY);//获取灰度图
    threshold(image, image, 170, 255, CV_THRESH_BINARY);//二值化
    findContours(image, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
    c_size = contours.size();


    for (i = 0; i < c_size && i<10; i++)
    {
        int k = 0;
        Mat Imgblack = Mat::zeros(image.rows, image.cols, CV_8UC1);
        rect[i] = minAreaRect(Mat(contours[i]));
        cvBoxPoints(rect[i], rectpoint);                              //获取4个顶点坐标
        drawContours(Imgblack, contours,i, Scalar(128), -1);          //在全黑的图上填充
        double rectarea = (rect[i].size.width* rect[i].size.height);
        Scalar a = sum(Imgblack);
        k = a[0]/128;
        double th = double(k) / rectarea;

        cout << "填充面积:" << endl << k << endl ;
        cout << "矩形面积:" << endl << rectarea << endl ;
        cout << "比例:" << endl << th << endl ;

        line(Imgblack, rectpoint[0], rectpoint[1], Scalar(255), 2);        //画矩形
        line(Imgblack, rectpoint[1], rectpoint[2], Scalar(255), 2);
        line(Imgblack, rectpoint[2], rectpoint[3], Scalar(255), 2);
        line(Imgblack, rectpoint[3], rectpoint[0], Scalar(255), 2);

        char strTmp[40];
        sprintf(strTmp, "Imgblack_%d", i);
        imshow(strTmp, Imgblack);
        
    }
    cvWaitKey(0);
    return 0;
}

第一步:读入图像。 

通过opencv和vc++计算矩形内部的填充比_第1张图片 待统计图像

第二步:再现并统计。 

通过opencv和vc++计算矩形内部的填充比_第2张图片 第一个矩形
通过opencv和vc++计算矩形内部的填充比_第3张图片 第二个矩形

第三步:输出。 

通过opencv和vc++计算矩形内部的填充比_第4张图片 统计结果

你可能感兴趣的:(通过opencv和vc++计算矩形内部的填充比)