例によってまるパクリです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
namespace _02_cameraFilter
{
class Program
{
static void Main(string[] args)
{
ShowCamera();
}
static void ShowCamera()
{
//カメラ映像を表示
int cameraPort = 0;
using (var capture = Cv.CreateCameraCapture(cameraPort))
{
IplImage frame = new IplImage();
// W640 x H480 (default resolution)のウィンドウを作る
int w = 640, h = 480;
// カメラ映像の画サイズ設定
Cv.SetCaptureProperty(capture, CaptureProperty.FrameWidth, w);
Cv.SetCaptureProperty(capture, CaptureProperty.FrameHeight, h);
//ESCキー押さない限り
while (Cv.WaitKey(1) != 27)
{
// 画像の取得
frame = Cv.QueryFrame(capture);
if (frame != null)
{
int threshold1 = 120;
int threshold2 = 80;
//trimmingするための座標
int trimmingX = 50;
int trimmingY = 20;
int trimmingW = 300;
int trimmingH = 300;
IplImage edgeFrame = new IplImage(frame.Width, frame.Height, BitDepth.U8, 1);
frame.Canny(edgeFrame, threshold1, threshold2);
//frameをトリミングする
IplImage trimmedFrame = trimming(edgeFrame, trimmingX, trimmingY, trimmingW, trimmingH);
Cv.ShowImage("Liveカメラ(元)", frame);
Cv.ShowImage("Liveカメラ(Edge)", edgeFrame);
Cv.ShowImage("抽出した映像", trimmedFrame);
//メモリ解放
Cv.ReleaseImage(trimmedFrame);
Cv.ReleaseImage(edgeFrame);
Cv.ReleaseImage(frame);
}
}
//ESCキーが押されたら
//全ての画像やwindowを削除
Cv.DestroyAllWindows();
capture.Dispose();
}
}
//frameをtrimmingする
static IplImage trimming(IplImage src, int x, int y, int width, int height)
{
IplImage dest = new IplImage(width, height, src.Depth, src.NChannels);
Cv.SetImageROI(src, new CvRect(x, y, width, height));
dest = Cv.CloneImage(src);
Cv.ResetImageROI(src);
return dest;
}
}
}
参照
http://www.thedesignium.com/development/8237
0 件のコメント:
コメントを投稿