Выпуск OpenCV drawContours
Я использую OpenCV (Java) с Eclipse Luna. У меня проблема с методом drawContours. В коде нет ошибок, но когда я запускаю его, изображение загружается, но видимых отсчетов нет.
Класс изображения:
public static void main(String[] args){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat m = Highgui.imread("C:/Users/MyName/Desktop/shapes.png", Highgui.CV_LOAD_IMAGE_COLOR);
Mat hsv = new Mat();
Mat mask = new Mat();
Mat dilmask = new Mat();
Mat fin = new Mat();
Scalar color = new Scalar(239, 117, 94);
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.cvtColor(m, hsv, Imgproc.COLOR_RGB2HSV);
new LoadImage("C:/Users/MyName/Desktop/shapes2.png", m);
Scalar lowerThreshold = new Scalar ( 120, 100, 100 );
Scalar upperThreshold = new Scalar ( 179, 255, 255 );
Core.inRange (hsv, lowerThreshold , upperThreshold, mask);
Imgproc.dilate ( mask, dilmask, new Mat() );
Imgproc.findContours(dilmask, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
//Imgproc.drawContours(fin, contours, -1, color, 0);
for ( int contourIdx=0; contourIdx < contours.size(); contourIdx++ )
{
if(contours.size()>10) // Minimum size allowed for consideration
{
Imgproc.drawContours ( fin, contours, contourIdx, color, 3);
}
}
//Highgui.imwrite("C:/Users/MyName/Desktop/shapes2.png", fin);
}
}
Класс LoadImage (не очень важно, просто создает рамку для отображения изображения):
public class LoadImage extends JFrame{
public LoadImage(String imgStr,Mat m)
{
Highgui.imwrite(imgStr,m);
JFrame frame = new JFrame("My GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
// Inserts the image icon
ImageIcon image = new ImageIcon(imgStr);
frame.setSize(image.getIconWidth()+10,image.getIconHeight()+35);
// Draw the Image data into the BufferedImage
JLabel label1 = new JLabel(" ", image, JLabel.CENTER);
frame.getContentPane().add(label1);
frame.validate();
frame.setVisible(true);}
}
Возможно, это простое исправление, но я ничего не могу найти по этому поводу.
1 ответ
Я знаю ответ, играть со значениями:
Scalar lowerThreshold = new Scalar (h1, s1, v1);
Scalar upperThreshold = new Scalar (h2, s2, v2);