opencv java swap_wxWidgets整合OpenGL+OpenCV+MathPlot(一种Windows和Linux通用的方法)

staticintattriblist[]={

WX_GL_RGBA, WX_GL_MIN_RED,1, WX_GL_MIN_GREEN,1,

WX_GL_MIN_BLUE,1, WX_GL_DEPTH_SIZE,1, WX_GL_DOUBLEBUFFER, None

};

BEGIN_EVENT_TABLE(UIOpenGLCanvas, wxGLCanvas)

EVT_SIZE(UIOpenGLCanvas::OnSize)

EVT_PAINT(UIOpenGLCanvas::OnPaint)

EVT_MOUSE_EVENTS(UIOpenGLCanvas::OnMouseEvent)

END_EVENT_TABLE()

UIOpenGLCanvas::UIOpenGLCanvas(wxWindow*parent,constwxString&caption)//:wxGLCanvas(parent, wxID_ANY, attriblist, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas"), wxNullPalette)//:wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas")):wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas"), attriblist, wxNullPalette)

,m_caption(caption), count(0) {intargc=1;char*argv[1]={ wxString((wxTheApp->argv)[0]).char_str() };/*NOTE: this example uses GLUT in order to have a free teapot model

to display, to show 3D capabilities. GLUT, however, seems to cause problems

on some systems. If you meet problems, first try commenting out glutInit(),

then try comeenting out all glut code*/glutInit(&argc, argv);

}

UIOpenGLCanvas::~UIOpenGLCanvas() {

}voidUIOpenGLCanvas::OnSize(wxSizeEvent&event) {//this is also necessary to update the context on some platformswxGLCanvas::OnSize(event);//set GL viewport (not called by wxGLCanvas::OnSize on all platforms

9b8a8a44dd1c74ae49c20a7cd451974e.png)intw, h;

GetClientSize(&w,&h);if(GetContext()) {

SetCurrent();

glViewport(0,0, (GLint) w, (GLint) h);

}

}voidUIOpenGLCanvas::OnMouseEvent(wxMouseEvent&event) {staticintdragging=0;staticfloatlast_x, last_y;//printf("%f %f %d\n", event.GetX(), event.GetY(), (int)event.LeftIsDown());if(event.LeftIsDown()) {if(!dragging) {

dragging=1;

}else{

yrot+=(event.GetX()-last_x)*1.0;

xrot+=(event.GetY()-last_y)*1.0;

Refresh(false);

}

last_x=event.GetX();

last_y=event.GetY();

}elsedragging=0;

}voidUIOpenGLCanvas::OnPaint(wxPaintEvent&WXUNUSED(event)) {

Render();

}voidUIOpenGLCanvas::Render() {/*此处很关键*/wxPaintDC(this);if(!GetContext())return;

SetCurrent();

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glViewport(0,0, (GLint)GetSize().x, (GLint)GetSize().y);

glBegin(GL_POLYGON);

glColor3f(1.0,0.0,0.0);

glVertex2f(0.1,0.1);

glVertex2f(-0.1,0.1);

glVertex2f(-0.1,-0.1);

glVertex2f(0.1,-0.1);

glEnd();//using a little of glutglColor4f(0,0,1,1);

glutWireTeapot(0.4);

glPopMatrix();

glFlush();

SwapBuffers();

}

好的,关于JavaOpenCV实现模板匹配的问题,我可以给你一些指导。 首先,你需要下载和安装OpenCV 3.2.0的Java库,并在Java项目中引用它们。然后,你可以使用Java代码调用OpenCV库的模板匹配函数。 下面是一个简单的例子: ``` import org.opencv.core.Core; 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; public class TemplateMatching { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String[] args) { // 读取源图像和模板图像 Mat source = Imgcodecs.imread("source.jpg"); Mat template = Imgcodecs.imread("template.jpg"); // 创建结果图像 Mat result = new Mat(source.rows() - template.rows() + 1, source.cols() - template.cols() + 1, CvType.CV_32FC1); // 进行模板匹配 Imgproc.matchTemplate(source, template, result, Imgproc.TM_CCOEFF_NORMED); // 找到匹配位置 Core.MinMaxLocResult mmr = Core.minMaxLoc(result); Point matchLoc = mmr.maxLoc; // 在源图像上绘制矩形框 Imgproc.rectangle(source, matchLoc, new Point(matchLoc.x + template.cols(), matchLoc.y + template.rows()), new Scalar(0, 255, 0), 2); // 显示结果 Imgcodecs.imwrite("result.jpg", source); } } ``` 在这个例子中,我们首先读取源图像和模板图像,然后创建一个结果矩阵,用于存储模板匹配的结果。然后,我们调用OpenCV的matchTemplate函数,将源图像和模板图像作为参数传入,并将结果存储在结果矩阵中。接着,我们使用Core.minMaxLocResult函数找到匹配位置,并在源图像上绘制矩形框。最后,我们将结果保存为一个新的图像文件。 希望这个例子可以帮助你开始使用JavaOpenCV进行模板匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值