簡體   English   中英

使用ROI的奇怪輸出(opencv C ++)

[英]Weird output using ROI (opencv C++)

我在使用opencv c ++使用ROI時遇到困難。

我有一系列存儲在矢量中的圖像。 矢量圖像包含大斑點和小斑點。 我想刪除每個矢量圖像的小斑點。 但是,如果刪除了當前矢量圖像中的小斑點,將影響下一個矢量圖像(和上一個矢量圖像)的斑點區域,輸出結果會有問題。 ROI opencv c ++有問題嗎? 下面是示例代碼:

vector<Mat> finalImg;
for(unsigned int i = 0 ; i < srcImg.size(); i++) {
    vector<vector<Point> > contoursFinal;
    vector<Vec4i> hierarchyFinal;

    Mat tempV_img;
    srcImg[i].copyTo(tempV_img);

    cv::findContours( tempV_img, contoursFinal, hierarchyFinal, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(0,0) );

    for(unsigned int j = 0; j < contoursFinal.size(); j++) {

        Rect r = cv::boundingRect( contoursFinal[j] );
        int heightChar = r.height;

        /// Set image region of interest
        cv::Rect ROI(r.x-1, r.y-1, r.width+2, r.height+2);
        Mat srcImg_crop = srcImg[i](ROI);

        cv::namedWindow("cropImg (bf)", 0);
        cv::imshow("cropImg (bf)", srcImg_crop);

        if(heightChar < srcImg[i].rows*0.90){
            srcImg_crop.setTo(0);
        }

        cv::namedWindow("cropImg (af)", 0);
        cv::imshow("cropImg (af)", srcImg_crop);
        cv::waitKey(0);

        if(cv::countNonZero(srcImg_crop) != 0) {
            finalImg.push_back(srcImg_crop);
        }
        srcImg_crop.release();
    }
    cv::namedWindow("Sorted Final", 0);
    cv::imshow("Sorted Final", finalImg[i]);
    cv::waitKey(0);

    contoursFinal.clear();
    hierarchyFinal.clear();
}

對不起,

我只是想通了。 下面顯示了竅門。

vector<Mat> tempV;
tempV.clear();
for(unsigned int i = 0 ; i < srcImg.size(); i++) {

    Mat temp;
    srcImg[i].copyTo(temp);

    tempV.push_back(temp);

    temp.release();
}

而不是使用srcImg [i]。 我將其替換為新的矢量tempV [i]。 這樣就不會影響上一個和下一個矢量圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM