URGのプログラムをネットのソースプログラムを参考に作ってみたのですが、コンパイルは通るのですが、実行ファイルを実行しても
コマンドプロンプトに打ち込むところまではうまくいくのですが一瞬実行されたあと瞬時に消えてしまいます。
その理由がわからず困っています。
どなたかお分かりでしたら教えていただきたいです。よろしくお願いします。
// シリアル接続でのセンサとの接続と距離データの取得・表示
#include "urg_sensor.h"
#include "urg_utils.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cvaux.h>
#include <opencv/highgui.h>
#include "opencv2/opencv.hpp"
using namespace cv;
#define WIDTH 1200 //ウィンドウの横幅
#define HEIGTH 750 //ウィンドウの縦幅
int main(int argc, char *argv[])
{
FILE *fp;
urg_t urg;
int scan_times=0; //スキャン時間[0.01s刻み]
int ret;
int n = 0,count = 0; //原点からの線分 Yes/No
int t = 0; //テキストデータ取得の有無
int i, j=0,k=0,l=0;
int m = 0; //倍率
long *length_data; //距離データ
int length_data_size; //1スキャン時のスキャン数
int a=0,b=0;
vector<int> ptr;
int xa[1000] = {0}; //ウィンドウ表示時のx座標
int ya[1000] = {0}; //ウィンドウ表示時のy座標
int x1[1000] = {0}; //jスキャン時のx座標の合計
int y1[1000] = {0}; //jスキャン時のx座標の合計
int xb[100][100] = {0.0};
int yb[100][100] = {0.0};
char saveImage[30];
char saveImage2[30];
char gazou[30];
int dx = 0;
int dy = 0;
int sx[1000] = {0}; //jスキャン時のx軸方向の速度
int sy[1000] = {0}; //jスキャン時のy軸方向の速度
double radian; //角度[rad]
long length; //長さ[mm]
//設定画面
printf("倍率 :"); scanf("%d",&m);
printf("特徴点の数 :"); scanf("%d",&n);
printf("ファイル名 :"); scanf("%s",&gazou);
printf("scan_times="); scanf("%d",&scan_times);
VideoCapture cap("video.avi");
VideoWriter writer("test1.avi", CV_FOURCC_DEFAULT, 10, Size(640, 480), true);
//ウィンドウ生成
cv::namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::Mat scan_img = cv::Mat::zeros( HEIGTH, WIDTH, CV_8UC3);
cv::Mat track_img = cv::Mat::zeros( HEIGTH, WIDTH, CV_8UC3);
cvMoveWindow("drawing",0,0);
// "COM1" は、センサが認識されているデバイス名にする必要がある
const char connect_device[] = "COM10";
const long connect_baudrate = 115200;
// センサに対して接続を行う。
ret = urg_open(&urg, URG_SERIAL, connect_device, connect_baudrate);
for (j = 0; j < scan_times; ++j) {
// データ受信のための領域を確保する
length_data = (long *)malloc(sizeof(long) * urg_max_data_size(&urg));
// センサから距離データを取得する。
ret = urg_start_measurement(&urg, URG_DISTANCE, 1, 0);
length_data_size = urg_get_distance(&urg, length_data, NULL);
for (i = 0; i < length_data_size; ++i) {
// その距離データのラジアン角度を求め、X, Y の座標値を計算する
radian = urg_index2rad(&urg, i);
length = length_data;
//xy座標に変換
x1 = (long)(length * cos(radian));
y1 = (long)(length * sin(radian));
}
for (i = 0; i < length_data_size; ++i) {
//ウィンドウ画面用に座標変換
xa = -1* x1 / m + HEIGTH / 2 ;
ya = -1* y1 / m + WIDTH / 2 ;
//ウィンドウにx,y座標系でプロット
if(length_data-length_data[i-1] < -50 || 50 < length_data-length_data[i-1] ){
cv::line(scan_img, cv::Point(ya, xa[i]), cv::Point(ya[i], xa[i]), cv::Scalar(0,0,200), 1, CV_AA);
}
else{
cv::line(scan_img, cv::Point(ya[i], xa[i]), cv::Point(ya[i-1], xa[i-1]), cv::Scalar(0,0,200), 1, CV_AA);
}
}
//ウィンドウ画面に表示
cv::imshow("drawing", scan_img);
//10msec待機
cv::waitKey(10);
sprintf(saveImage, "one_scan_data.png");
cv::imwrite(saveImage, scan_img);
// (1)load a specified file as a 3-channel color image
const char *imagename = argc > 1 ? argv[1] : "C:/Users/10t435/Desktop/研究室1/one_scan_data.png";
Mat harris_img = imread(imagename);
if(!harris_img.data)
return -1;
// (2)convert to a grayscale image and normalize it
Mat gray_img;
cvtColor(harris_img, gray_img, CV_BGR2GRAY);
normalize(gray_img, gray_img, 0, 255, NORM_MINMAX);
// (4)detect and draw strong corners on the image using Harris detector
vector<Point2f> corners;
goodFeaturesToTrack(gray_img, corners, n, 0.0001, 50, Mat(), 3, true);
vector<Point2f>::iterator it_corner = corners.begin();
for(; it_corner!=corners.end(); ++it_corner) {
circle(track_img, Point(it_corner->x, it_corner->y), 1, Scalar(0,255,0), -1);
circle(track_img, Point(it_corner->x, it_corner->y), 8, Scalar(0,255,0 ));
}
if (harris_img.empty()) // 再生終了時にはemptyが設定される
break;
// (6)show destination images, and quit when any key pressed
namedWindow("Harris",CV_WINDOW_AUTOSIZE);
cvMoveWindow("Harris",0,0);
imshow("Harris", harris_img);
//フレームの保存
writer << harris_img;
sprintf(saveImage, "%s%d_harris.png",gazou,k);
cv::imwrite(saveImage, harris_img);
k++;
scan_img = cv::Mat::zeros( HEIGTH, WIDTH, CV_8UC3);
harris_img = cv::Mat::zeros( HEIGTH, WIDTH, CV_8UC3);
namedWindow("Track",CV_WINDOW_AUTOSIZE);
cvMoveWindow("Track",0,0);
imshow("Track", track_img);
track_img = cv::Mat::zeros( HEIGTH, WIDTH, CV_8UC3);
}
// センサとの接続を閉じる。
urg_close(&urg);
system("PAUSE");
cvDestroyWindow("drawing");
return 0;
}
URGの自作プログラム
ページ移動
- 掲示板
- ↳ C言語何でも質問掲示板
- ↳ 四聖龍神録2 掲示板
- ↳ 四聖龍神録Plus掲示板
- ↳ AerobeatPlus掲示板
- 副次コンテンツ
- ↳ 作品お披露目掲示板
- 登録ユーザー用コンテンツ
- ↳ 登録ユーザー掲示板
- コミュニティフォーラム
- ↳ みんなでソースコードをレビューしよう
- ↳ 3DCGソフト使用者のコミュ
- ↳ Win32 API
- ↳ 組み込み系スクリプト言語をつかってみよう
- ↳ 東方好きあつまれ
- ↳ C言語誰でも交流サイト - mixC++ -
- ↳ ビット論理演算が好きな人♪
- ↳ 企画関係について語ろうか
- ↳ エフェクトアニメーション
- ↳ 学生で集まってみる?
- ↳ DirectX SDK
- ↳ マイコン/FPGA電子工作部
- ↳ PHPに可能性を無限大
- ↳ Code Golf を楽しもう!
- ↳ 作曲している人で話し合ってみませんか♪
- ↳ ソフト制作コミュ
- ↳ El Shaddai - エルシャダイ -
- ↳ PSPプログラミング
- ↳ CINEMA 4D
- ↳ お絵かきコミュニティ
- ↳ 素材作ってみたよ!
- ↳ OpenGL
- ↳ OpenCV
- ↳ RPGを作りたい!
- ↳ ポケモン好き集まれ
- ↳ ならば .NETをやらないか?
- ↳ 1から勉強してみないか?
- ↳ 赤髪超大好き♪
- ↳ ノースリーブ
- ↳ 伝説の戦士プリキュアを語ろう
- ↳ コンテストコミュニティー
- ↳ DXライブラリ何でも質問コミュニティ
- ↳ 四聖龍神録コミュニティ
- ↳ HTML/CSS/JavaScript
- ↳ 生放送コミュ
- ↳ サンプルを共有するコミュニティ
- ↳ おすすめマーカー
- ↳ minecraft
- ↳ Xtal Language
- ↳ マインクラフト
- ↳ 数学やらないか?
- ↳ 習ったことをプログラムで表してみよう!
- ↳ 小物アプリ作成や ら な い か
- ↳ AIの可能性は無限大
- ↳ 自作OS製作(GUI入門)[雑談]
- ↳ リレーコーディング
- ↳ Unix/Linux
- ↳ 競技プログラミングごっこやろうぜ
- ↳ 夏休みプログラミングイベント2012 in MixC++
- ↳ D言語を広めよう
- ↳ Scala布教の会
- ↳ 3Dゲーム作ろうぜ!モデリング~プログラミングまで
- ↳ 言語に興味を持ったら是非!!
- ↳ レイヴンズ・ネスト
- ↳ C言語とC++言語のコミュニティー!
- ↳ 放課後ふぁんたじあ
- ↳ マイ サンプルズ
- ↳ ガンヲタの館
- ↳ 歯科機器
- ↳ 歯科機器情報
- ↳ 52歳からはじめるC言語
- mixC++更新・仕様変更履歴