FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


dllを作る


今までの経緯を簡単に書くと

初めはVC++でopenCVの部分のコードを書いた

次にC#の方がなんか簡単じゃね?と思って

インターフェイス部分をC#で開発

しかし、openCVがそのままでは使えない事実にぶち当たる

悩んだ結果再びVC++でインターフェイス部分を開発しようとする

が、やっぱりC#の方がなにかと簡単

ど素人の自分にはもう次にどうしていいのかわからなくなっちゃいました


で、ネットの海をさまよっていると

dllを自分で作るという手段があることを発見

最初その文面を見たときは

「ああ、こんな上級なこと自分なんかには無理無理」

と思っていたのですが、何件か同じようなサイト様をめぐっていると

「意外と簡単そうじゃね?」と思えるように

で、さっそく試してみました

見たところ方法は2種類あるみたいで

一つはdllとdefファイルを作る方法

もう一つはクラスライブラリを作ってしまう方法


二つとも試してみて、後者の方がなんかかっこいいし簡単だったので 後者の方法をメモっておきます

・まずVC++の新規プロジェクトで クラスライブラリを選択します

ちなみにVC++とC#の.NET Frameworkはバージョンをそろえないと動かないみたいです、
もろに引っかかりました。VC++2008でdllを作って とC#2010で実験したら怒られました
ヴァージョンが2と4でした

201005233.jpg

・次にクラスの名前を変更してメソッド(関数)を自作します

今回は実験なので 呼び出されると15という数字を返すだけの関数にしました。

これでビルドします。openCVのプログラムをきちんと記述した場合はインクルードファイルや
参照するdllファイルも指定してやらねばなりません。


201005234.jpg

ビルドが通ると dllファイルがプロジェクトフォルダに出てきます

これを
C#の方のプロジェクトの実行ファイルと同じ位置にコピーしてやり、
ソリューションエクスプローラの参照設定から登録します

さらにプログラムで登録されたdllを指定します

今回は using dll5; です。

ちなみになぜ5かというと1~4は失敗でいろいろ試行錯誤したからですw
201005232.jpg

あとはクラスを 実体化させればおk

testdll test = new testdll();

textBox3.Text = test.abcd().ToString();

テキストボックスが3なのももちろん試行錯誤の痕跡w

ボタンを押すと
201005235.jpg

ちゃんと15が表示されます。

この方法で
openCVでの挙動を全てC++で開発して インターフェイス担当のC#に組み込めばきっとうまくいくはず!


いやぁ、今日は一日中いろいろ試してふらふらだけど、こうゆうプログラムの仕方もあることを知れて

ちょっと成長した気分

もうHPもMPも1しかないけど気持ちいい


結局C++


結局パスの追加方法が良くわからんので

C++とC#両方で攻めてみます

方法がわかるまでC#は停止

なんかスマートに行かないものだなぁ

C#の方がやりやすかったのに残念だ

はやく自己解決できるプログラマーになりたい


追加パスはどうやって・・・


不思議なものでC++を使っていたころは

C#の方が参考資料多いなぁとか思っていたのに、

なぜかC#を使ってる現在はC++の方が参考資料が多く感じる

なんなんだろうこれ、初心者の特性かな


とりあえず

カメラの画像を取り込もうと思って、openCVをインストールし

ライブラリ等のパスを通そうと思ったのですが

どうやら2010からパスの登録方法が変わっているらしい

なんてめんどくさい事をしやがるんだ!!

VC++2010での方法がわかったので、どうせC#でも同じなんでしょ?

なんて思っていたら、全然違うっぽいwww

ちくしょー わかんねぇぇぇ

しかも調べる途中で、openCVはC++用でC#で直接使えないみたいな 文面をいくつか目撃

まじっすか! せっかくC#に乗り換えたのに・・・

なんか一手間加えれば使えるみたいだけど、

とりあえず今はそんなことより  ライブラリパスをどうやって通せばいいのか

これが問題だ


画像送信 その2


昨日 イメージデータを配列にすることに成功したので

早速送受信の実験をしてみました

ただ、具体的にどうすればいいのかわからなかったので

てきとうに思いついた方法を試してみたら

以外にもうまくいってしまって、歓喜w

ただ、あまり実用的ではないのかも

今は画像を一枚送信することしかしてないのでこれで問題なさそうですが

他の作業と同時進行だとしんどくなりそうだし、

なんとなくあまり美しいプログラムではなさそう、 素人の勘ですがね

もっといろんなクラスを使えば美しく作れるのかな  勉強せねば

画像送信クライアント:pict_send.txt
画像受信サーバー: pict_recv.txt

201005231.jpg


さーて、いよいよ動画を送信するプログラムに入ります

静止画が予想外に思い通りに行ってくれたので、動画もうまく行ってくれるといいなぁ


画像送信 その1


タチコマのカメラ情報を操作用PCに送信しなくてはならないので

PC間で画像データを送受信できなくてはなりません

その下準備として

画像を送信する方法を調べてみると、どうやら一度 イメージデータを配列に置き換えねばならないらしい

そりゃそうか

ってなわけで、手始めに イメージと配列の変換をどうやったらいいのか勉強してみました

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 System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Image pict;
        private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                pict = Image.FromFile(textBox1.Text);
                pictureBox1.Image = pict;
            }
            catch(FileNotFoundException)
            {
                MessageBox.Show("ファイルが存在しません");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {

            ImageConverter imgconv2 = new ImageConverter();
            byte[] b = (byte[])imgconv2.ConvertTo(pict, typeof(byte[]));

            ImageConverter imgconv = new ImageConverter();
            Image img = (Image)imgconv.ConvertFrom(b);


            pictureBox2.Image = img;
        }
    }
}



一見すごく無駄ですが、画像を開いて

それを配列データに変換した後に 配列データを画像データに再変換して表示してます

まぁ、ただの確認です

201005223.jpg

うん、たぶんきちんと出来てますよね

一見さらっと出来たように見えますが・・・ 

自分のアホなミスで2時間近く頭を抱えましたww 画像の読み込みの段階でww

シンプルな作業だけに例外が取れないと絶望でしたねw


とりあえず 配列データに出来たのでこれを BinaryStreamかなんかで送信すればいけるのかな?

頭の中ではいけそうなイメージだけど、実際はいろいろ難しいんだろうなぁ

ともあれ、今日はもう疲れたので、あした!!!



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。