初心者のためのActive Basicでの画像処理のプログラミング方法

このQ&Aのポイント
  • 初心者でも簡単にできるActive Basicを使った画像処理のプログラミング方法を紹介します。40枚の画像からデータを抽出し、一枚のTEXTファイルに保存する方法も解説します。
  • Active Basicを使用して画像処理を行う方法を初心者向けに解説します。40枚の画像からデータを抽出し、一つのファイルにまとめる手順も詳しく説明します。
  • 画像処理のプログラミングをActive Basicで行う初心者のための解説です。40枚の画像からデータを抽出し、一枚のテキストファイルに保存する方法を説明します。
回答を見る
  • ベストアンサー

初心者です。Active Basic で画像処理のプログラミングを作ったのですが・・・

画像処理のプログラミングをActive Basic で作成したのですが、 1枚の1枚写真からデータが抽出されるのですが、すべてまとめて一枚のTEXTファイルに保存したいです。 初心者のため、教えていただきたいです。 プログラムです ↓↓↓↓ for nflame=1 to 40 ' ←分析する画像ファイル数 FileName="c:\ab\"+Str$(nflame)+".bmp" 'c:\ab\ というフォルダに、分析する画像を、1.bmp、2.bmp・・と保存しておく BLoad(FileName , hBmp ) PutBmp( 1,1, hBmp ) GetBmp( 1,1,301 ,200, hBmp ) 'ここにx、y解像度をいれる a="c:\ab\"+Str$(nflame)+".txt" '色のデータは、写真ごとに1.txt, 2.txtというように保存されるが、すべてまとめて一枚のTEXTファイルに保存したいです。 open a as #1

質問者が選んだベストアンサー

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.3

ごめんなさい。質問の主旨を取り違えていた上に編集中のメッセージをNo.2に入れてしまいましたm(__;m >a="c:\ab\"+Str$(nflame)+".txt" '色のデータは、写真ごとに1.txt, 2.txtというように保存されるが、すべてまとめて一枚のTEXTファイルに保存したいです。 ファイル名を更新して各々を別ファイルにしないなら.. (1)OPEN文をFOR~NEXT文の外(FORの前)に出す。 (2)CLOSE文をFOR~NEXT文の外(NEXTの後)に出す。 (3)ファイル名を生成するコードをFOR~NEXT文の外(OPEN文の前)に出して固定化する。 (例)a="c:\ab\alldata.txt"

yduakiishi
質問者

お礼

回答ありがとうございます。 質問内容がわかりづらくて申し訳ありません。 無事解決しました! ありがとうございます。

その他の回答 (2)

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.2

>a="c:\ab\"+Str$(nflame)+".txt" '色のデータは、写真ごとに1.txt, 2.txtというように保存されるが、すべてまとめて一枚のTEXTファイルに保存したいです。 ファイル名を更新して各々を別ファイルにしないなら.. (1)OPEN文をFOR~NEXT文の外に出す。 (2)CLOSE文をFOR~NEXT文の外に出す。(2)ファイルmwi名を生成するコードをFOR~NEXT文の外に出して固定化する。 (例)a="c:\ab\alldata.txt"

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

えっと、下記の質問の時の方がコードがしっかりしていたような.. >質問投稿日時:09/01/06 19:20 >質問番号:4608963 で、上記の質問時のコードで下記の3行が気になりました。 FOR ループの内側にOPEN文があるのにCLOSE文がFORループの外です。 本来の BASIC言語の思想なら、最初の NEXT後のOPENでCLOSEされていないファイルハンドルを再使用しようとするわけですから、BASICが OPENエラーを出すべきですね。 >Next nflame >close #1 >End

関連するQ&A

  • テキストファイルとして開くVBA

    フォルダC:\Users\USER\Desktop\あいう において このダイアログを開いて そのなかのファイル(A.xml)を txtファイルとして開いて その名前を テキスト.txt として 同名で保存したいのですが Dim FileName As Variant Dim NewFile As TextFile FileName = Application.GetOpenFilename() Set NewFile = TextFile.Open(FileName) NewFile.SaveAs "テキスト.txt" Activetxtfile.SaveAs FileName:="C:\Users\PC\Desktop\あいう\テキスト.txt", FileFormat:=TextFile どうも違うようです 御教示ください

  • 【VC++6.0 MFC】画像表示について

    お世話になっております。C++初心者です。 とある開発でVC++6.0のMFCを利用して画像表示を行う作業をしています。 リソースファイルを使用せず、 外部の画像ファイルを読み込みピクチャーボックスに表示しなければならないのですが、 下記の関数を呼び、BMPファイルを読み込み、 NULLの場合はエラーメッセージを表示するようにしているのですが、 必ずNULLが返ってきてしまいます。 何が問題なのかもわからず苦戦しております。 知識不足で申し訳ないのですが、お願いします。 【疑問点】 ・画像ファイルの指定は絶対パス?相対パス? ***問題の箇所*** HBITMAP hBmp; // ビットマップハンドル // ビットマップのハンドル取得 hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ハンドルのチェック if(hBmp == NULL) {   AfxMessageBox("読み込みに失敗しました");   return ; }

  • 画像の保存方法。

    VC++のMFC、ダイアログベースで画像処理のソフトを開発している者です。 ピクチャーコントロールに画像を表示させて、その画像を保存したいと思っています。 保存用のダイアログを開き、名前を付けて保存したいのですがうまくいきません。 下が今作っているプログラムです。 void Cstart2Dlg::OnBnClickedButton10() { CFileDialog myDLG(FALSE,"BMP","*.BMP", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "画像(*.BMP)|*.BMP||"); if(myDLG.DoModal() == IDOK){ CStdioFile fout(myDLG.GetPathName(),CFile::modeCreate |CFile::modeWrite|CFile::typeBinary); UpdateData(TRUE); fout.WriteString(m_pict8); fout.WriteString("\xla"); filename = myDLG.GetPathName(); SetWindowText("start2"+filename); } ピクチャーコントロールの変数をm_pict8にしています。テキストファイルを保存するプログラムを参考にして作っているので間違っているのだと思います。 画像の保存方法が分かる方がいらっしゃいましたらよろしくお願いいたします。

  • テキストファイルをSQLServerデータベースのbinary型またはvarbinary型に保存したい。

    VB6から『画像ファイル(.bmpと.jpg)』、『テキストファイル(.txt)』を SQLServerデータベースに保存するといったものを作成しようとしています。 フィールドのデータ型は、画像をimage型、テキストをvarbinary型に設定したいと考えておりまして、画像の方は、Byte型に代入後、LoadFromFileメソッドやWriteTextメソッドで保存や取込が出来たのですが、テキストの方が、同じようにByte型に代入までは出来たものの、その先どのようにして保存(取込)をして良いか分かりません。(エラーになってしまいます。) テキストの方もデータ型をimage型にするしか方法はないのでしょうか? 何か良い方法があれば教えていただけませんでしょうか? 宜しくお願いします。

  • 画像(bmp等)の保存形式について

    画像(bmp等)の保存形式について 画像の保存のフォーマットについて質問です。 bmpの形式についてのwebページをみてみたんですが、 structを書いてメンバをかいていたりするんですが、 bmpのファイルをテキストエディタでみてみてもうまくみれないし、 やっぱりバイナリエディタでみると数字の羅列なんですが、 実際に作る場合にはstructとかを書いた後に使うコンパイラみたいなものがあるんでしょうか? struct等C言語のプログラミングの知識はあります。 よろしくお願いします。

  • Visual Studio 2005でWindowsフォームのプログラミングについて

    「Visual Studio 2005」のC++でWindowsフォームのプログラミングをしているのですが、画像保存ができなくて困ってます。 「開く」はどうにか参考書を見ながらできましたが、「保存」ができません。以下がプログラムとなっております。 private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {  OpenFileDialog^ myDLG = gcnew OpenFileDialog();  myDLG->AddExtension = true;  myDLG->DefaultExt = "bmp";  myDLG->FileName = "*.bmp";  myDLG->ShowReadOnly = false;  myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg";  if(myDLG->ShowDialog()==System::Windows::Forms::DialogResult::OK){    this->Text = myDLG->FileName;    pictureBox1->Image = gcnew Bitmap(myDLG->FileName);    Invalidate();  } } private: System::Void 保存SToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {  SaveFileDialog^ dlg = gcnew SaveFileDialog();  dlg->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg | すべてのファイル(*.*) | *.*";  if(dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK){    return;  } /*** ここからわかりません。 ***/ } 知ってる方がいましたら教えてください。よろしくお願いします。

  • 画像処理 ビットマップ ダブルバッファリング

    「猫でもわかるWindowsプログラミング」を参考に、ビットマップを表示するプログラムを作っています。 下記ソース(WM_PAINT部分のみ抜粋)のような感じで、 読み込んだビットマップをダブルバッファリングを用いて表示させたいのですが、 何も表示させることができず、困っております。 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) {   HBITMAP hBmp;   BITMAP bmp_info;   HDC hDC, hDC_mem;   PAINTSTRUCT ps;   int w=0, h=0;   switch (msg) { case WM_PAINT:   hDC = BeginPaint(hwnd,&ps);   hDC_mem = CreateCompatibleDC(hDC);   hBmp=LoadBitmap(hInst, TEXT("MYBMP"));   hBmp = (HBITMAP)LoadImage(hInst, TEXT("MYBMP"), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info); w = bmp_info.bmWidth; h = bmp_info.bmHeight; SelectObject(hDC_mem, hBmp); BitBlt(hDC, 0, 0, w, h, hDC_mem, 0, 0, SRCCOPY); DeleteDC(hDC_mem); DeleteObject( hBmp ); EndPaint( hwnd, &ps ); break; } } リソースですが、下記のように bitmap1.bmpを指定しており、画像はもちろんフォルダ内に入れ、 読み込める状態にはしています。   //   // Bitmap   //   MYBMP BITMAP "bitmap1.bmp"   #endif // 日本語 resources しかし、hBmpの戻り値を調べると NULL の値が入っています。当然画像は表示されません。 当方、Microsoft visual studio 2005を使っておりますが、このプロジェクトは、 Win32コンソールアプリケーション⇒Windowsアプリケーション で作成はせず、 Win32コンソールアプリケーション⇒コンソールアプリケーション で作成していますので、 ここが問題になっているのでしょうか? できれば、コンソールアプリケーションで作成したいですが、LoadImage関数は使えないのでしょうか? それとも他に問題点があるのでしょうか? 以前は動画処理をしており、SetDIBitsToDevice関数を使って配列の中身を指定し、画像をウィンドウ上に表示していました。 しかし、画像のちらつきが気になったため、ダブルバッファリングに改良しようとし、 調べてみたところ、ビットマップを用いるやり方が一般的なようでした。 そこで、まずはビットマップの表示をさせるプログラムをつくってみようと思ったのですが、つまずいている状態です。 環境は、 Microsoft Windows XP Home Edition Version2002 Service Pack 3 Pentium(R) 4 CPU 2.80GHz 1.0GB RAM Microsoft visual studio 2005(有料) です。 何かアドバイスをよろしくお願いします。

  • 画像の連続取り込み

    Visual Studio 2005のC++を使ってプログラムしている者です。 C#で画像の連続した取り込みができるプログラムを見つけて、C++でもできないかと思い、とりあえず"000.bmp"という画像を読み込めるプログラムを組んで見たのですがどうもうまくいきません。 Visual Studio の検索で以下のようにできましたが"'System::Object::ToString' : 関数に 1 個の引数を指定できません。"といったエラーがでてしまいます。ある程度近いところまでいっているとは思うのですが・・・どこが間違っているのかわかる方おりましたらよろしくお願いします。 Object^ o = gcnew Object; o = (Object^)0; System::String^ filename = "C:/Documents and Settings/Owner/デスクトップ/"; //画像の場所ではなくファイルの場所(例:デスクトップ) filename += o->ToString("000") + ".bmp"; //ファイルの中の画像を指定 g = gcnew Bitmap(filename,true);

  • Opencv画像処理 bmp処理

    常々自分の理解力の無さに呆れるyuki-yutoです。 今回はOpencvで作ったプログラムと別のプロジェクトで作ったプログラムをソースをコピーして一つにしたところ、オバーフロー?してしまうらしくプログラムが実行できません。 二つ別々なら動くので関数の受け渡しが悪いのでしょうか? 今回の処理の目的は Opencvでキャプチャ→bmpで保存→(書いていませんが)for文でRGBの量を求める→一定量のRが検出されればショートカットを起動する というものです。 RGBに関してはfor(i=0;i<width;i++)とかでまわしているソースを何処かで見た気がするのですが、bmp処理は疎いので正直RGBをどうやって出すかまだ良くわかっていません。 widthまでを使っているあたり1pixel毎配列にでも記録させているのでしょうか・・・? #include <stdio.h> #include <Windows.h> //bmp読み込み,ショトカ #include<iostream> #include <C:\OpenCV2.1\include\opencv\cv.h> #include <C:\OpenCV2.1\include\opencv\highgui.h> #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cv210d.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cxcore210d.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cvaux210d.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\highgui210d.lib") #else //Releaseモードの場合 #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cv210.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cxcore210.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\cvaux210.lib") #pragma comment(lib,"C:\\OpenCV2.1\\lib\\highgui210.lib") #endif #include <math.h> #include <stdlib.h> int main(void){ //画像保存用 char str[32];//大きさは多く取っておいたほうが良いかも?640*480対応できるように。 //キー入力用 int key; //カメラの用意 CvCapture *capture; IplImage *frame = NULL; //カメラ画像用 //カメラ・デバイスの先頭ポインタを取得 capture = cvCaptureFromCAM(-1); //カメラ画像のサイズ double height = 240; double width = 320; //カメラ初期化 if(capture == NULL){ //カメラが見つからなかった場合 printf("カメラが見つかりません\n"); return (0); } //カメラ画像を表示するウィンドウの生成 cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, height); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, width); cvNamedWindow("CaptureFromCamera", CV_WINDOW_AUTOSIZE); //キー入力されたら画像をキャプチャ while(1){ //カメラ画像からフレーム画像を取り込む frame = cvQueryFrame(capture); if(frame == NULL) break; //画像の表示 cvShowImage("CaptureFromCamera", frame); //sキー入力で画像を保存、Escキー入力でループから抜ける key = cvWaitKey(10); if(key == '\x1b') break; else if(key == 's'){ sprintf_s(str, "Capture_Bitmap.bmp"); cvSaveImage(str, frame); } } //ウィンドウの破棄 cvDestroyWindow("CaptureFromCamera"); } //ここからキャプチャしたbmp処理。 int main( int argc, char *argv[] ){ FILE *fp; //ポインタ、読み込み専用 BITMAPFILEHEADER bfh; //ファイルヘッダ BITMAPINFOHEADER bmpinfo; //情報ヘッダ //BMPファイルがあるかどうかチェック if((fp=fopen("Capture_Bitmap.bmp","rb"))==NULL){ printf("ファイルが見つかりません"); exit(1); } //BMPファイルか確認 fread(&bfh, 14, 1, fp); //ファイルヘッダ読み込み,ってかファイルヘッダの1~14を読み込む if(memcmp(&bfh.bfType,"BM",2)) //BMPファイルかチェック、2バイト位置にBMがあるか printf("BMPファイルではありません"); fread(&bmpinfo, 40, 1, fp); //情報ヘッダ読み込み printf("データの大きさは%dMB\n",(bmpinfo.biSizeImage+bmpinfo.biSize)/1000000); //表示サイズ調節 //何色BMPファイルか返却値で判定 switch(bmpinfo.biBitCount){ case 1: printf("2色ビットマップ\n"); break; case 4: printf("16色ビットマップ\n"); break; case 8: printf("256色ビットマップ\n"); break; case 24: printf("1677色ビットマップ\n"); break; case 32: printf("1677色ビットマップ\n"); break; } //ココでRGBを抽出する、確かforを二回bmpの縦と横の最大値まで繰り返し、何か変数に入れるソースを見た気が・・・? printf("インターネット ショートカット を起動します。Enterを押してね"); getchar(); //ショトカ起動文。Windows.hでデスクトップにショートカットを指定。 fclose(fp); rewind(stdin); getchar(); }

  • アクセス VBA ファイル操作

    ノートパッドなどテキストエディタで開くことができる、拡張子がtxtではないファイルがあります。 そのファイルをテキストエディタで開いて、名前を変えて、テキストファイルとして保存したいのです が、どのようなコードになりますでしょうか? 下記で開くのですが、 Shell "NOTEPAD C:\test\sampl\abc.ini" その後、 SaveAs FileName:="C:\test\temp\xyz.txt", のように処理しようと思ったのですが、上手くいきません。 お手数ですがご教示ください。

専門家に質問してみよう