?? singleqrtest.java
字號:
/* このソースは実験用のソースです。 * 動いたり動かなかったりします。 * */package jp.nyatla.nyartoolkit.sandbox.qrcode;import javax.media.*;import javax.media.util.BufferToImage;import javax.media.format.*;import jp.nyatla.nyartoolkit.NyARException;import jp.nyatla.nyartoolkit.jmf.utils.*;import jp.nyatla.nyartoolkit.core.*;import java.awt.*;import jp.nyatla.nyartoolkit.core.labeling.*;import jp.nyatla.nyartoolkit.core.param.*;import jp.nyatla.nyartoolkit.core.raster.*;import jp.nyatla.nyartoolkit.core.rasterfilter.*;import jp.nyatla.nyartoolkit.core2.rasterfilter.rgb2gs.*;import jp.nyatla.nyartoolkit.core2.rasterfilter.gs2bin.*;import jp.nyatla.utils.j2se.LabelingBufferdImage;import jp.nyatla.nyartoolkit.core.types.*;import jp.nyatla.nyartoolkit.core2.rasteranalyzer.threshold.*;public class SingleQrTest extends Frame implements JmfCaptureListener{ private final String camera_file = "../../Data/camera_para.dat"; private JmfNyARRaster_RGB _raster; private JmfCaptureDevice capture; private NyARParam ap; public SingleQrTest() throws NyARException, NyARException { setBounds(0, 0, 640 + 64, 720 + 64); // キャプチャの準備 JmfCaptureDeviceList list=new JmfCaptureDeviceList(); capture=list.getDevice(0); capture.setCaptureFormat(320,240,30.0f); capture.setOnCapture(this); // キャプチャイメージ用のラスタを準備 this._raster = new JmfNyARRaster_RGB(320, 240,capture.getCaptureFormat()); // AR用カメラパラメタファイルをロード ap = new NyARParam(); ap.loadARParamFromFile(camera_file); ap.changeScreenSize(320, 240); } private NyARBinRaster _binraster1 = new NyARBinRaster(320, 240); private NyARGrayscaleRaster _gsraster1 = new NyARGrayscaleRaster(320, 240); private INyARRasterThresholdAnalyzer _tha=new NyARRasterThresholdAnalyzer_DiffHistgram(); private LabelingBufferdImage _bimg = new LabelingBufferdImage(320, 240); public void onUpdateBuffer(Buffer i_buffer) { try { // キャプチャしたバッファをラスタにセット _raster.setBuffer(i_buffer); Graphics g = getGraphics(); // キャプチャ畫像 BufferToImage b2i = new BufferToImage((VideoFormat) i_buffer.getFormat()); Image img = b2i.createImage(i_buffer); this.getGraphics().drawImage(img, 32, 32, this); // 畫像1 INyARRasterFilter_RgbToGs filter_rgb2gs = new NyARRasterFilter_RgbAve();// INyARRasterFilter_RgbToGs filter_rgb2gs = new NyARRasterFilter_RgbMul(); filter_rgb2gs.doFilter(_raster, _gsraster1); this._bimg.drawImage(this._gsraster1); this.getGraphics().drawImage(this._bimg, 32 + 320, 32, 320 + 320 + 32, 240 + 32, 0, 240, 320, 0, this); _tha.analyzeRaster(_gsraster1); NyARRasterFilter_Threshold gs2bin=new NyARRasterFilter_Threshold(_tha.getThreshold()); // 畫像2 gs2bin.doFilter(_gsraster1, _binraster1); this._bimg.drawImage(_binraster1); this.getGraphics().drawImage(this._bimg, 32, 32 + 240, 320 + 32, 240 + 32 + 240, 0, 240, 320, 0, this); // 畫像3 NyARLabelingImage limage = new NyARLabelingImage(320, 240); NyARLabeling_ARToolKit labeling = new NyARLabeling_ARToolKit(); labeling.attachDestination(limage); labeling.labeling(_binraster1); this._bimg.drawImage(this._gsraster1); NyARSquareStack stack = new NyARSquareStack(100); NyARQrCodeDetector detect = new NyARQrCodeDetector(ap.getDistortionFactor(), new NyARIntSize(320,240));// detect.bimg=this._bimg; detect.detectMarker(_binraster1, stack); for (int i = 0; i < stack.getLength(); i++) { NyARSquare[] square_ptr = (NyARSquare[]) stack.getArray(); int d=square_ptr[i].direction; int[] xp=new int[4]; int[] yp=new int[4]; for(int i2=0;i2<4;i2++){ xp[i2]=square_ptr[i].imvertex[(i2+d)%4].x; yp[i2]=square_ptr[i].imvertex[(i2+d)%4].y; } Graphics g2=this._bimg.getGraphics(); g2.setColor(Color.RED); g2.drawPolygon(xp, yp,3); g2.setColor(Color.CYAN); g2.drawRect(square_ptr[i].imvertex[d].x, square_ptr[i].imvertex[d].y,5,5); } this.getGraphics().drawImage(this._bimg, 32 + 320, 32 + 240, 320 + 32 + 320, 240 + 32 + 240, 0, 240, 320, 0, this); // 畫像3 // threshold.debugDrawHistgramMap(_workraster, _workraster2); // this._bimg2.setImage(this._workraster2); // this.getGraphics().drawImage(this._bimg2, 32+320, 32+240,320+32+320,240+32+240,0,240,320,0, this); // 畫像4 // NyARRasterThresholdAnalyzer_SlidePTile threshold=new NyARRasterThresholdAnalyzer_SlidePTile(15); // threshold.analyzeRaster(_gsraster1); // filter_gs2bin=new NyARRasterFilter_AreaAverage(); // filter_gs2bin.doFilter(_gsraster1, _binraster1); // this._bimg.drawImage(_binraster1); // NyARRasterDetector_QrCodeEdge detector=new NyARRasterDetector_QrCodeEdge(10000); // detector.analyzeRaster(_binraster1); // this._bimg.overlayData(detector.geResult()); // this.getGraphics().drawImage(this._bimg, 32, 32+480,320+32,480+32+240,0,240,320,0, this); // 畫像5 /* * threshold2.debugDrawHistgramMap(_workraster, _workraster2); this._bimg2.drawImage(this._workraster2); this.getGraphics().drawImage(this._bimg2, * 32+320, 32+480,320+32+320,480+32+240,0,240,320,0, this); */ // this.getGraphics().drawImage(this._bimg, 32, 32, this); } catch (Exception e) { e.printStackTrace(); } } private void startCapture() { try { capture.start(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { SingleQrTest mainwin = new SingleQrTest(); mainwin.setVisible(true); mainwin.startCapture(); } catch (Exception e) { e.printStackTrace(); } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -