Я хочу, чтобы моя программа для ввода изображения (приложение) input и вывода строки, как:Найти контур проверен на Яве с OpenCV
- Вопрос 1: коробка 2 проверено
- Вопрос 2: коробка 1 проверено
- Вопрос 3: коробка 3 проверено
- Вопрос 4: коробка 2 проверено
Etc ... (так как многие вопросы, как у меня за изображение)
я могу просто найти пустые коробки с этой программой:
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class test {
public static void main(String[] args) {
// Load the library of openCv
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Consider the image for processing
Mat image = Imgcodecs.imread("C:/attachement.jpg", Imgproc.COLOR_BGR2GRAY);
Mat imageHSV = new Mat(image.size(), CvType.CV_8UC4);
Mat imageBlurr = new Mat(image.size(),CvType.CV_8UC4);
Mat imageA = new Mat(image.size(), CvType.CV_32F);
Imgproc.cvtColor(image, imageHSV, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imageHSV, imageBlurr, new Size(5,5), 0);
Imgproc.adaptiveThreshold(imageBlurr, imageA, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY,7, 5);
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(imageA, contours, new Mat(), Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_SIMPLE);
for(int i=0; i< contours.size();i++)
{
if (Imgproc.contourArea(contours.get(i)) > 50)
{
Rect rect = Imgproc.boundingRect(contours.get(i));
if ((rect.height > 35 && rect.height < 60) && (rect.width > 35 && rect.width < 60))
{
Imgproc.rectangle(image, new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.y+rect.height),new Scalar(0,0,255));
}
}
}
Imgcodecs.imwrite("C:/Users/Benreghai/Downloads/tof/output.png",image);
}
}
Вот результат моей программы: (изображение прилагается) output
Благодарим за помощь!
Вы пробовали использовать _HoughLinesP_ [здесь] (http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html)? Это даст вам все прямые изображения. Поскольку у вас уже есть прямоугольник, вы можете применить только в этом регионе и выполнить проверку для пересечения –
Я не использую HoughLines, я новичок в openCv. Можете ли вы применить его в моем коде? –