2014-02-12 3 views
3

이것은 내 프로그램으로 캔버스에 단추를 추가해야합니다. 어떻게이 일을 성취 할 수 있습니까?JavaCV의 CanvasFrame에 구성 요소 표시

import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import javax.imageio.ImageIO; 
import org.opencv.core.Core; 
import org.opencv.core.Mat; 
import org.opencv.core.MatOfByte; 
import org.opencv.core.MatOfRect; 
import org.opencv.core.Point; 
import org.opencv.core.Rect; 
import org.opencv.core.Scalar; 
import org.opencv.highgui.Highgui; 
import org.opencv.highgui.VideoCapture; 
import org.opencv.objdetect.CascadeClassifier; 

import com.googlecode.javacv.CanvasFrame; 
import com.googlecode.javacv.cpp.opencv_core.IplImage; 

public class CarDetect implements Runnable { 
    IplImage image; 
    static int count=0,imagecount=0; 
    static int label=0; 
    CanvasFrame canvas = new CanvasFrame("Detect"); 

    public CarDetect() { 

     canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
     canvas.setBounds(200,0, 640,500); 
      **//canvas.add(any component such as panel,button etc)** 
    } 

    @Override 
    public void run() { 

     System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
     VideoCapture camera = new VideoCapture(0); 
     // 1 for next camera 

     try { 
      Mat frame = new Mat(); 
      while (true) { 
       camera.read(frame); 

       Mat image_tmp = frame; 
       MatOfByte matOfByte = new MatOfByte(); 
       BufferedImage bufImage = null; 
       if(image_tmp!=null) 
        Highgui.imencode(".jpg", image_tmp, matOfByte); 

        byte[] byteArray = matOfByte.toArray(); 
        try { 
         InputStream in = new ByteArrayInputStream(byteArray); 
         bufImage = ImageIO.read(in); 
        } 
        catch (Exception e) { 
         e.printStackTrace(); 
        } 
        canvas.showImage(bufImage); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


    public static void main(String[] args) { 
     CarDetect gs = new CarDetect(); 
     Thread th = new Thread(gs); 
     th.start(); 
    } 
} 

답변

3
import com.googlecode.javacv.CanvasFrame; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JButton; 
import net.miginfocom.swing.MigLayout; 

public class Test { 
    BufferedImage bi; 
    CanvasFrame cf; 
    public Test() throws IOException{ 
     bi = ImageIO.read(getClass().getResource("/resources/colorspec_.jpg")); 
     cf = new CanvasFrame("Canvas With Button"); 
     cf.setLayout(new MigLayout("insets 0, gap 10", "grow", "grow")); 
     cf.add(new JButton("My Button"), "w 100:100:100, h 40:40:40"); 
    } 

    public void showWindow(){ 
     cf.showImage(bi); 
     cf.pack(); 
    } 

    public static void main(String[] args) throws IOException { 
     Test t = new Test(); 
     t.showWindow(); 
    } 
} 

하면, 약간의 팁을 이동 : 당신이 당신의 요구 사항에 맞게이 MigLayout documentation를 사용하여 더 많은 재생할 수 있습니다 .. 을하지만 대부분의 시간 I에 유래 통해 고급 사용을 발견하지만 .. 희망이 도움이 .. =)

스크린 샷 나는 그것을 실행하면

enter image description here

0

는 (당신은 쉽게 버튼을 추가 할 수있는) JPanel의를 사용하고 프레임 중 하나에 컴퓨터 비전 캔버스를 넣어하는 가장 좋은 방법이 아닙니다? 여기

는 javacv 민속 GUI application (링크의 상기 상위)를 생성 ( jump directly to code)

튜토리얼 예이다. 여기

관련 문제