OpenCV의 Java 릴리스에서 만든 매트가 있습니다. 이제 이것을 창에서 볼 필요가 있습니다. 어떻게 할 수 있습니까? 나는 그것이 꽤 간단해야한다고 느낀다. 파이썬과 C++에 대한 수많은 예제를 발견하지만, 간단한 자바 예제는 없다. 도움이 필요 하신가요?Java OpenCV에서 매트를 매트에 표시하는 방법은 무엇입니까?
1
A
답변
0
나는 다른 대답을 위해 파이썬 예제를 변환하는 것에 대해 내 손을 썼다. 나는 자바에 대한 경험이별로 없기 때문에 뭔가를 놓친다. 말하자면, 나는 opencv를위한 자바 바인딩을 사용하는 상황에 다소 실망했다. opencv 공식 바인딩 대신 javacv (https://github.com/bytedeco)를 사용하는 것이 좋습니다. imshow 및 마우스 이벤트 후크에 대한 바인딩 누락으로 인해 javacv만큼 유용하지 않습니다.
나는 javacv를 사용하여 나를 위해 작동하는 코드를 제공하며, 파이썬 답변과 다소 비슷하게 동작해야합니다. notre.jpg
은 사용자가 제공 한 위키 링크에서 다운로드 할 수 있습니다. 가능하다면 언어를 C++로 바꿀 수도 있습니다. 나는 자바 바인딩으로 인해 용납 할 수없는 버그 나 심각한 유용성 문제가있을 수 있다는 생각이 들었다. 이 게시물이 도움이 될 수
package javaapplication2;
import java.util.ArrayList;
import java.util.List;
import org.bytedeco.javacpp.Pointer;
import static org.bytedeco.javacpp.opencv_calib3d.*;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_highgui.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
public class JavaApplication2 {
public static void main(String[] args) throws Exception {
System.loadLibrary("opencv_core249");//without these two lines, I get unsatisfied link exception on my pc. you should unzip the contents of opencv-windows-x86_64.jar etc to a folder and run with -Djava.library.path="C:\opencv\javacv-bin\bin"
System.loadLibrary("jniopencv_core");
Mat im =new Mat(480,640,CV_8UC3);//dummy
Mat dst = null;//new Mat(480,640,CV_8UC1);//dummy
final List<Point> pSrc=new ArrayList<Point>();
final List<Point> pDst=new ArrayList<Point>();
/*640x480 camera
pDst.add(new Point(120,84)); //cam
pDst.add(new Point(525,84));//cam
pDst.add(new Point(525,427));//cam
pDst.add(new Point(120,427));//cam
*/
pDst.add(new Point(94,72));//notre
pDst.add(new Point(343,72));//notre
pDst.add(new Point(343,501));//notre
pDst.add(new Point(94,501));//notre
namedWindow("src",0);
namedWindow("dst",0);
MouseCallback mouseSrc= new MouseCallback() {
@Override
public void call(int event, int x, int y, int flags,Pointer param) {
if(event==CV_EVENT_LBUTTONDOWN)
{
if(pSrc.size()>=4) pSrc.clear();
pSrc.add(new Point(x,y));
}
}
};
setMouseCallback("src", mouseSrc, null);
/* this should work but no..bug?
MouseCallback moustDst= new MouseCallback() {
@Override
public void call(int event, int x, int y, int flags,Pointer param) {
if(event==CV_EVENT_LBUTTONDOWN)
{
if(pDst.size()>=4) pDst.clear();
pDst.add(new Point(x,y));
}
}
};
setMouseCallback("dst", moustDst, null);*/
/* uncomment this one to read from webcam
VideoCapture cap = new VideoCapture(1);
while (cap.read(im)) {*/
im = imread("c:/data/notre.jpg");
while(true){
if(dst==null)
{
dst=im.clone();
}
Mat imD = im.clone();
Mat dstD = dst.clone();
for(int i=0;i<pSrc.size();++i)
{
circle(imD,pSrc.get(i),4,new Scalar(255,0,0,255),-1,1,1);
}
if(pSrc.size()==4 && pDst.size()==4)
{
Mat msrc = new Mat(4,2,CV_64FC1);
Mat mdst = new Mat(4,2,CV_64FC1);
for(int i=0;i<pSrc.size();++i)
{
//this is probably not the right way for element access, but I cant find a more straightforward way
msrc.asCvMat().put(i,0,(double)pSrc.get(i).x());
msrc.asCvMat().put(i,1,(double)pSrc.get(i).y());
}
for(int i=0;i<pDst.size();++i)
{
mdst.asCvMat().put(i,0,(double)pDst.get(i).x());
mdst.asCvMat().put(i,1,(double)pDst.get(i).y());
}
Mat H =findHomography(msrc, mdst);
warpPerspective(imD, dstD, H, new Size(dstD.cols(),dstD.rows()));
}
for(int i=0;i<pDst.size();++i)
{
circle(dstD,pDst.get(i),4,new Scalar(255,255,0,255),-1,1,1);
}
imshow("src",imD);
imshow("dst",dstD);
if(cvWaitKey(1)==27)
break;
}
//cap.release();
}
}
관련 문제
- 1. 3x1 매트를 3 채널 매트에 할당
- 2. 루프에있을 때 opencv에서 이미지를 표시하는 방법은 무엇입니까?
- 3. OpenCV에서 스트리밍 이미지를 표시하는 방법은 무엇입니까?
- 4. 매트를 ROI로 복사하는 방법은 무엇입니까?
- 5. Android의 Opencv에서 Mat에 액세스하는 빠른 방법은 무엇입니까?
- 6. 벡터를 매트에 저장하기
- 7. 매트를 OpenCV Java의 Interger 배열로 변환하는 방법은 무엇입니까?
- 8. 배열을 변환하십시오 <System:Byte>^매트에
- 9. Imgproc.convexityDefects(); Eclipse + java + opencv에서
- 10. OpenCV에서 ROI를 설정하는 방법은 무엇입니까?
- 11. opencv에서 함수를 사용하는 방법은 무엇입니까?
- 12. 매트를 키포인트로 변환 하시겠습니까?
- 13. 기존 매트에 이미지로드
- 14. jTable - 제한된 열만 표시하는 방법은 무엇입니까? Java
- 15. Java ArrayList의 내용을 표시하는 방법은 무엇입니까?
- 16. Java UI로 돈을 표시하는 적절한 방법은 무엇입니까?
- 17. Java 애플릿로드 실패시 메시지를 표시하는 방법은 무엇입니까?
- 18. .java 파일을 텍스트 뷰에 표시하는 방법은 무엇입니까?
- 19. Java AWT를 사용하여 정보를 표시하는 방법은 무엇입니까?
- 20. 매트에 이미지를로드 할 수 없습니다. opencv
- 21. Java로 OpenCV에서 매트를 원시 배열에 복사 중입니까? ("채널 수 배수"오류 발생)
- 22. 스핑크스 검색에서 자신의 순위 매트를 만드는 방법은 무엇입니까?
- 23. OpenCV : 매트를 스칼라로 나누는 가장 쉬운 방법은 무엇입니까
- 24. OpenCV에서 YAML 파일을 편집/업데이트하는 방법은 무엇입니까?
- 25. openCV에서 색상을 회색조 이미지로 변환하는 방법은 무엇입니까?
- 26. OpenCV에서 Hough Line 위치를 비교하는 방법은 무엇입니까?
- 27. OpenCV에서 이미지의 해상도를 줄이는 방법은 무엇입니까?
- 28. opencv에서 OTSU 임계 값을 사용하는 방법은 무엇입니까?
- 29. OpenCV에서 초점 거리를 계산하는 방법은 무엇입니까?
- 30. OpenCV에서 비디오의 프레임 피드를 얻는 방법은 무엇입니까?
: http://stackoverflow.com/questions/16494916/equivalent-method-for-imshow-in-opencv-java-build – beaker