簡體   English   中英

JavaCV cvInRangeS錯誤

[英]JavaCV cvInRangeS Error

我正在嘗試過濾掉圖像中的輪廓。 我的代碼沒有語法錯誤,但是我在運行程序時只得到很多紅色文本。 我確定了失敗的要點是cvInRangeS。

cvInRangeS(imghsv,minc,maxc,imgbin);

您可以通過println語句看到它,僅使其變為“ thourgh3”

square.jpg在項目目錄中,因此如果有幫助,就不應該成為問題。

控制台返回

Through 1
Through 2
Through 3 
OpenCV Error: Assertion failed (src1.size == dst.size && dst.type() == CV_8U) in     cvInRangeS, file ..\..\..\..\opencv\modules\core\src\arithm.cpp, line 2972
Exception in thread "main" java.lang.RuntimeException: ..\..\..\..\opencv\modules\core\src\arithm.cpp:2972: error: (-215) src1.size == dst.size && dst.type() == CV_8U in function cvInRangeS

at com.googlecode.javacv.cpp.opencv_core.cvInRangeS(Native Method)
at opencv2.OpenCV2.main(OpenCV2.java:50)
Java Result: 1

完整的代碼如下

package opencv2; 


/*There are import statments here but for the sake of space I have left them out :D*/

public class OpenCV2 {
    public static void main(String[] args) {

        IplImage img1;
        IplImage imghsv;
        IplImage imgbin;
        CvScalar minc = cvScalar(95,150,75,0), maxc = cvScalar(145,255,255,0);
        CvSeq contour1 = new CvSeq(), contour2;
        CvMemStorage storage = CvMemStorage.create();
        double areaMax = 1000, areaC = 0;

        System.out.println("Through 1");

        img1 = cvLoadImage("square.jpg");
        imghsv = cvCreateImage(cvGetSize(img1),8,3);
        imgbin = cvCreateImage(cvGetSize(img1),8,3);
                    System.out.println("Through 2");

        cvCvtColor(img1,imghsv,CV_BGR2HSV);
                    System.out.println("Through 3");

        cvInRangeS(imghsv,minc,maxc,imgbin);
                    System.out.println("Through 4");

        cvFindContours(imgbin,storage,contour1,Loader.sizeof(CvContour.class),
                CV_RETR_LIST, CV_LINK_RUNS,cvPoint(0,0));

        contour2 = contour1;

                    System.out.println("Through 5");

        while(contour1 != null && !contour1.isNull()){
        areaC = cvContourArea(contour1,CV_WHOLE_SEQ,1);

        if(areaC > areaMax){
        areaMax  = areaC;
        }

        contour1 = contour1.h_next();
        }//end of while

        while(contour2 != null && !contour2.isNull()){
        areaC = cvContourArea(contour2,CV_WHOLE_SEQ,1);

                    System.out.println("Through 6");

        if(areaC < areaMax){
        cvDrawContours(imgbin,contour2,CV_RGB(0,0,0),CV_RGB(0,0,0),
                0,CV_FILLED,8,cvPoint(0,0));
            }//end of if

                    System.out.println("Through 7");
        contour2 = contour2.h_next();
        }//end of while2

                    System.out.println("Through 8");
        cvShowImage("Color",img1);
        cvShowImage("CF",img1);
        cvWaitKey();

        cvReleaseImage(img1);
        cvReleaseImage(imghsv);
        cvReleaseImage(imgbin);
        cvReleaseMemStorage(storage);

    }//end of main
}//end of class

cvInRangeS()假定輸入圖像的類型為CV_8U ,因此您必須先對其進行轉換。

...
cvtColor(imghsv, grayscale, CV_BGR2GRAY ); 
cvInRangeS(grayscale,minc,maxc,imgbin);
...

謝謝你的幫助。 問題是在這一行中,我將其設置為3通道圖像“ 3”。imgbin = cvCreateImage(cvGetSize(img1),8,3);

它應該是一個二進制映像。 imgbin = cvCreateImage(cvGetSize(img1),8,1);

暫無
暫無

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

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