openCV 簡單實現身高測量(二)


前篇講過基於相機焦距和手機PPI進行測量身高,但是這種測量方式具有不可控性,誤差很大,所以該篇文章采用參照物對比進行測量身高。

和前篇一樣進行HOG特征檢測,Grabcut分割,BorderMatting邊緣細化。

然后就是識別參照物,利用直方圖均衡化提高對比度然后在進行剔除非閾值范圍內的顏色。當然在進行處理之前,將RGB模型轉變成HSV模型。該項目是基於小程序實現,所以用戶再輸入基本信息時需要輸入參照物的長度和顏色。

void GCApplication::measureReferencePX()
{
    Mat imgHSV;
    //黃、紅、藍
    int index;
    if (color == "黃色")
        index = 0;
    else if (color == "紅色")
        index = 1;
    else
        index = 2;
    int iLowH[3] = { 18,156,110 };
    int iHighH[3] = { 38,180,130 };
    //設置飽和度的范圍值
    int iLowS[3] = { 90,43,43 };
    int iHighS = 255;
    //設置亮度的范圍值
    int iLowV[3] = { 90,46 ,46 };
    int iHighV = 255;
    vector<Mat> hsvSplit;
    cvtColor(*image, imgHSV, COLOR_BGR2HSV); //BGR 轉化成 HSV,因為直方圖均衡化需要在HSV空間做
    imshow("imgHSV1", imgHSV);
    split(imgHSV, hsvSplit);
    equalizeHist(hsvSplit[2], hsvSplit[2]);
    merge(hsvSplit, imgHSV);

    inRange(imgHSV, Scalar(iLowH[index], iLowS[index], iLowV[index]), Scalar(iHighH[index], iHighS, iHighV), imgThresholded); //圖像的范圍
    imshow("Thresholded", imgThresholded);
    //開操作 (去除一些噪點)
    Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
    //morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);
    //閉操作 (連接一些連通域)
    morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);

    //計算參照物像素高度
    int i, j;
    int flagA, flagB;
    flagA = flagB = 0;
    //從上面進行遍歷
    for (i = 0; i < imgThresholded.rows; i++)
    {
        for (j = 0; j < imgThresholded.cols; j++)
            if (imgThresholded.at<uchar>(i, j) == 255 && !flagA) // 標記第一個出現像素的像素點
            {

                FA.x = j;//注意順序,坐標原點位於左上角
                FA.y = i;
                flagA = 1;
                break;
            }
        if (flagA)
            break;
    }
    //從下面進行遍歷
    for (i = imgThresholded.rows - 1; i > 0; i--)
    {
        for (j = 0; j < imgThresholded.cols; j++)
            if (imgThresholded.at<uchar>(i, j) == 255 && !flagB) // 標記第一個出現像素的像素點
            {

                FB.x = j;//注意順序,坐標原點位於左上角
                FB.y = i;
                flagB = 1;
                break;
            }
        if (flagB)
            break;
    }
    imshow("Thresholded Image", imgThresholded);
    maxRefPX = FB.y - FA.y;
}

然后也對人物前景進行二值化,遍歷找到兩組特征點。

計算兩個的比例系數K,然后根據參照物真實長度進行等比例計算。

經過系統的測試,如在系統的使用要求下(拍攝距離需2.5m外,測量人員身上攜帶顏色與參照物顏色不同),誤差率在5‰。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM