這是我的最小代碼:
package charucotest;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.QRCodeDetector;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import org.opencv.core.MatOfByte;
import org.opencv.core.Size;
import org.opencv.videoio.VideoCapture;
import java.util.concurrent.*;
import org.opencv.aruco.Aruco;
import org.opencv.aruco.ArucoDetector;
import org.opencv.aruco.DetectorParameters;
import org.opencv.aruco.Dictionary;
import java.util.ArrayList;
import java.util.List;
public class App {
public static JFrame frame;
public static String currentpath;
public static void main(String[] args) {
currentpath = System.getProperty("user.dir");
System.out.println("current path is:" currentpath);
System.load(currentpath "/lib/libopencv_java460.so");
Dictionary dictionary= Aruco.getPredefinedDictionary(Aruco.DICT_4X4_50);
DetectorParameters parameters= DetectorParameters.create();
//parameters.set_cornerRefinementMethod(Aruco.CORNER_REFINE_NONE);
//parameters.set_cornerRefinementMethod();
ArucoDetector detector= new ArucoDetector(dictionary,parameters);
System.out.println("Welcome to OpenCV " Core.VERSION);
List<Mat> corners = new ArrayList<Mat>();
//List<Mat> rejectedImgPoints = new ArrayList<Mat>();
Mat ids = new Mat();
// [12,12]
Mat img2 = Imgcodecs.imread(currentpath "/assets/card.jpg");
detector.detectMarkers(img2, corners, ids);
System.out.println("OpenCV Mat: " ids.dump());
System.out.println("OpenCV size idds " ids.size());
System.out.println("OpenCV Mat Corner: " String.valueOf(corners.size()));
}
}
opencv 庫已加載,如果我有兩行,我可以解碼 qrcode,這樣它就可以作業了。
但是當我嘗試閱讀我的資產卡時:

什么都沒發現,
我已經驗證了 4x4 50 的 aruco 代碼似乎很好:
或者通過將檢測字典更改為 6x6 并使用此板(二維碼檢測作業正常)

uj5u.com熱心網友回復:
ArUco 標記不應直接放置在影像的邊緣。并且標記需要一個完整而寬的黑色邊框。
- 如果在整個影像周圍添加一些空白區域,則會檢測到前兩個標記(id 0 和 1)。
- 如果將一些黑色添加到第二行標記的斷幀,則檢測到所有標記(id 0、1、2 和 3)。
請檢查這個修改后的輸入影像:

更新
當我使用此影像運行上面的代碼時,我得到以下輸出:
current path is: <my working dir>
Welcome to OpenCV 4.6.0
OpenCV Mat: [2;
3;
1;
0]
OpenCV size idds 1x4
OpenCV Mat Corner: 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515003.html
標籤:爪哇opencv阿鲁科
上一篇:cv2等待輸入取決于先前的輸入
