Tengo un código simple de escritura para recuperar el número de contornos en una imagen y obtener el número de contornos en la imagen. Pero siempre da una respuesta incorrecta. Por favor, ¿alguien puede explicar sobre esto?¿Número incorrecto de contornos en javacv?
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.CanvasFrame;
import static com.googlecode.javacpp.Loader.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import java.io.File;
import javax.swing.JFileChooser;
public class TestBeam {
public static void main(String[] args) {
CvMemStorage storage=CvMemStorage.create();
CvSeq squares = new CvContour();
squares = cvCreateSeq(0, sizeof(CvContour.class), sizeof(CvSeq.class), storage);
JFileChooser f=new JFileChooser();
int result=f.showOpenDialog(f);//show dialog box to choose files
File myfile=null;
String path="";
if(result==0){
myfile=f.getSelectedFile();//selected file taken to myfile
path=myfile.getAbsolutePath();//get the path of the file
}
IplImage src = cvLoadImage(path);//hear path is actual path to image
IplImage grayImage = IplImage.create(src.width(), src.height(), IPL_DEPTH_8U, 1);
cvCvtColor(src, grayImage, CV_RGB2GRAY);
cvThreshold(grayImage, grayImage, 127, 255, CV_THRESH_BINARY);
CvSeq cvSeq=new CvSeq();
CvMemStorage memory=CvMemStorage.create();
cvFindContours(grayImage, memory, cvSeq, Loader.sizeof(CvContour.class), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
System.out.println(cvSeq.elem_size());
CanvasFrame cnvs=new CanvasFrame("Beam");
cnvs.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
cnvs.showImage(src);
//cvShowImage("Final ", src);
}
}
Ésta es la imagen de ejemplo que utilicé
Pero siempre devuelve código de salida como 8. favor, alguien puede explicar esto?
Obtengo 19 en esta imagen, usando Python API. –
@AbidRahmank ¿Tiene alguna idea sobre su significado? –
Obtuve 19 porque, un límite de imagen completo, luego 9 límites externos y 9 límites internos de 9 cuadrados. Si hubieras invertido la imagen, tendrías 18, creo, porque el límite de la imagen habrá desaparecido. visita: http://opencvpython.blogspot.com/2012/06/hi-this-article-is-tutorial-which-try.html –