SharperCVでカメラ表示画面を出す
これ
http://shokai.org/projects/opencv-study/index.cgi/file/bafff35d077a/SimpleCapture/image.cpp
#include <stdio.h> #include <highgui.h> int main(int argc, char** argv) { CvCapture *capture; IplImage *frameImage; char windowNameCapture[] = "Capture"; capture = cvCreateCameraCapture(0); if(capture == NULL){ printf("カメラが見つからない"); return -1; } cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE); while (1) { frameImage = cvQueryFrame(capture); cvShowImage(windowNameCapture, frameImage); if (cvWaitKey(33) == 'q') break; } cvReleaseCapture(&capture); cvDestroyWindow(windowNameCapture); return 0; }
をC#で書き直した。
C++はCvNamedWindowの名前とか覚えておいて終了前にDestroyするのに使わないとならんのだけどC#だとそういう必要がなく、window.Close()と素直にメモリを解放できる
カメラが見つからない時の処理は何も書いてないけど、CvWindowに見つからない旨が表示されるので書かなくていい。
.NETでForm作って、そのFormからHighGUIのOpenCV用のウィンドウ作ってその中にカメラでキャプチャした映像を入れる例です。
.NETでやるならHighGUIいらないので次はFormの中にキャプチャ画面を入れるのをやる。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SharperCV; namespace SimpleCapture { public partial class SimpleCaptureForm : Form { public SimpleCaptureForm() { InitializeComponent(); } private void buttonStart_Click(object sender, EventArgs e) { captureRun(); } public void captureRun(){ CvImage frameImage; CvCapture capture = new CvCapture(0); CvWindow window = new CvWindow("Capture"); while (true) { frameImage = capture.QueryFrame(); window.Image = frameImage; if (CvWindow.WaitKey(33) == 'q') break; } capture.Close(); window.Close(); } } }