البرمجة

تحقق من وجود دائرة داخل مربع باستخدام Java وOpenCV

في مجال تطوير البرمجيات ومعالجة الصور باستخدام لغة البرمجة Java ومكتبة OpenCV، يمكنك تحقيق هدفك بفحص إذا كانت الدائرة الحمراء موجودة داخل المربع الأسود بعد تحويل الصورتين إلى صور ثنائية (binary images). سأوضح لك الخطوات التي يمكن أن تساعدك في تحقيق ذلك.

أولاً وقبل كل شيء، يجب عليك استيراد مكتبة OpenCV في مشروعك. يمكنك فعل ذلك عبر إضافة التبعيات التالية في ملف الـ POM لمشروع Maven الخاص بك:

xml
<dependency> <groupId>org.openpnpgroupId> <artifactId>opencvartifactId> <version>4.5.1-1version> dependency>

ثم، يمكنك استخدام الكود التالي في Java لتحقيق الهدف الذي وضعته:

java
import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.MatOfPoint2f; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import java.util.ArrayList; import java.util.List; public class ShapeDetection { public static void main(String[] args) { // Load binary images Mat circleBinary = Imgcodecs.imread("path/to/circle_binary_image.png", Imgcodecs.IMREAD_GRAYSCALE); Mat squareBinary = Imgcodecs.imread("path/to/square_binary_image.png", Imgcodecs.IMREAD_GRAYSCALE); // Find contours in the binary images List circleContours = new ArrayList<>(); List squareContours = new ArrayList<>(); Imgproc.findContours(circleBinary, circleContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.findContours(squareBinary, squareContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); // Iterate through circle contours for (MatOfPoint circleContour : circleContours) { // Convert the circle contour to a polygon MatOfPoint2f circleContour2f = new MatOfPoint2f(circleContour.toArray()); MatOfPoint2f approxCurve = new MatOfPoint2f(); Imgproc.approxPolyDP(circleContour2f, approxCurve, Imgproc.arcLength(circleContour2f, true) * 0.02, true); // Check if the circle is inside the square if (Imgproc.pointPolygonTest(approxCurve, squareContours.get(0).toArray(), true) > 0) { System.out.println("The red circle is inside the black square."); } else { System.out.println("The red circle is NOT inside the black square."); } } } }

يرجى استبدال “path/to/circle_binary_image.png” و “path/to/square_binary_image.png” بمسار حقيقي لصورتي الدائرة والمربع على التوالي. يستخدم الكود أسلوبًا بسيطًا للتحقق مما إذا كانت الدائرة داخل المربع أم لا باستخدام وظائف OpenCV. يمكنك تكييف الكود بناءً على احتياجات مشروعك الخاص.

المزيد من المعلومات

في هذا السياق، يعتبر OpenCV أحد أشهر المكتبات المفتوحة المصدر المخصصة لمعالجة الصور والرؤية الحاسوبية. يستخدم OpenCV بشكل واسع في مجالات مثل التعرف على الأشكال والتعرف على الصور ومتابعة الحركة والروبوتات والتطبيقات الطبية والكثير من التطبيقات الأخرى.

للبداية، يجب عليك تأكيد أنك قد قمت بتكوين مشروعك بشكل صحيح لاستخدام OpenCV. قم بتحميل مكتبة OpenCV وضمن مشروعك، وتأكد من إضافة التبعيات اللازمة في ملف POM إذا كنت تستخدم Maven.

ثم، يمكنك استخدام الكود السابق كنقطة انطلاق. في هذا الكود، يتم تحميل الصور الثنائية (binary images) للدائرة والمربع باستخدام Imgcodecs.imread. ثم يتم استخدام Imgproc.findContours للعثور على حدود الكائنات في الصورة الثنائية.

تُستخدم Imgproc.approxPolyDP لتقريب الحدود إلى مضلع. وأخيرًا، يتم استخدام Imgproc.pointPolygonTest لفحص ما إذا كانت الدائرة داخل المربع أو لا.

هذا الكود يعتبر بسيطًا ويمكن تعديله وتخصيصه وفقًا لاحتياجات مشروعك الخاص. يمكنك تطويره ليشمل التعامل مع متعدد الكائنات، وتحسين عملية التعرف على الأشكال، وتحسين الأداء بشكل عام.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!