SSブログ

ちょっと面白いものを作ってみた。 [DIY]

OpenCVという画像処理ができるソフトがあるんだけど、これを使ってどんなことができるかは、気になっていたんだけど、ちょっとかいてみただけで、こんなことができた。

画像ソースは、昨日のAPS練習会でとったプレートの銃口からの風景です。
これに対して、
plate1.jpg
このファイルを画像の各フレームから探せとやって、
探した結果の質が0.4以上なら赤い枠をつけるというものです。
音声をつけられるといいんだけど、ちょっとまだやりかたがわからないので、映像だけです。


見えちゃいけない景色が見えていますが、よい子はまねしないようにしましょう。

元画像では、"図形”に残ってるけど、これはあくまでも結果です。
単にへたくそであります。それはいいの!

ソース整形とか、コメントクリアとかぜんぜんやってないけど、まあ、後で見るかもしれないし、誰かの役に立つかもしれないからさらします。たぶん俺が一番使いそうだけど。。。。

// opencv1.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"
#include 
#include 
#include 

using namespace System;

int main(array ^args)
{
	Console::WriteLine(L"Hello World");
	cv::VideoCapture cap("C:\\Users\\jake\\Videos\\avis\\platecut.avi");
	// ファイルがオープンできたかの確認
	if(!cap.isOpened()) return -1;
	// 探索画像
	cv::Mat tmp_img = cv::imread("plate1.bmp", 1);
	if (tmp_img.empty()) return -1;
	cv::Mat tmpgray_img;
	 cv::cvtColor(tmp_img, tmpgray_img, CV_BGR2GRAY);
	int fps = 15;
	cv::Mat frame;
	cv::Mat frame_gray;
	cap >> frame;  // キャプチャ
	cv::Size cap_size(frame.cols,frame.rows);
	cv::VideoWriter writer("C:\\Users\\jake\\Videos\\avis\\platemarked1.mpg", CV_FOURCC('M','P','E','G'), fps, cap_size);
	int count=0;
	// cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);

		while(1) {
			cv::Mat frame;
			cv::Mat frame_gray;
			cap >> frame;  // キャプチャ
			if (frame.empty()) break;

			 cv::cvtColor(frame, frame_gray, CV_BGR2GRAY);


			// 様々な処理
			// ...
			cv::Mat result_img;
			// テンプレートマッチング
			cv::matchTemplate(frame_gray, tmpgray_img, result_img, CV_TM_CCOEFF_NORMED);

			// 最大のスコアの場所を探す
			cv::Rect roi_rect(0, 0, tmp_img.cols, tmp_img.rows);
			cv::Point max_pt;
			double maxVal;
			cv::minMaxLoc(result_img, NULL, &maxVal, NULL, &max_pt);
			roi_rect.x = max_pt.x;
			roi_rect.y = max_pt.y;
			//std::cout << "(" << max_pt.x << ", " << max_pt.y << "), score=" << maxVal << std::endl;
			Console::WriteLine("frame:"+count+"( "+max_pt.x+" , "+max_pt.y+") score="+maxVal);
			// 探索結果の場所に矩形を描画
			if (maxVal>0.4){
				cv::rectangle(frame, roi_rect, cv::Scalar(0,0,255), 3);
			}
			cv::namedWindow("search image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
			//cv::namedWindow("result image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
			cv::imshow("search image", frame);
			writer << frame;
			count++;
			//cv::imshow("result image", result_img);
			//    cv::imshow("Capture", frame);
			//
			int ch;
			ch=cv::waitKey(10);
			if (ch == 'e') {
				break;
			}

		}
	writer.release();
	

	return 0;
}


コメント(0) 
共通テーマ:趣味・カルチャー

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。