DOBON.NET DOBON.NETプログラミング掲示板過去ログ

[VB]OpenCVによるハフ変換

環境/言語:[Windows7,VB2012]
分類:[.NET]

OS: Windows7
開発環境: Visual Studio Express 2012 
使用言語: Visual Basic 2012

こんにちは。774と申します。最近VBを学び始め,簡単な画像処理プログラムを作成しています。現在はエッジ検出した画像から直線を検出するハフ変換の実装を目標に取り組んでいます。

ハフ変換用にopencvを導入し,公開されているサンプルソースコードをVBで使えるように変換しているのですが、行き詰まってしまい質問させて頂きました。


参考ソースコード→http://opencv.jp/sample/special_transforms.html
上記ページのcvHoughLines2、標準的なハフ変換を参考にしています。

下記ソースコードで、コメントアウト標準的なハフ変換のfor文以降でエラーがでてしまいます。グレースケール、エッジ検出までは自力で完成させていたため、filenameに保存したファイルのパスを与えています。どこが間違っているのでしょうか。

自分なりに問題を検索してみたのですが解決できず、やむを得ず質問させて頂きました。よろしければお力添え宜しくお願いいたします。


●自作ソースコード

 Private Sub hough_Standard()
        Dim i As Integer
        Dim line As Pointer(Of Single), rho As Pointer(Of Single), theta As Pointer(Of Single)
        Dim a As Double, b As Double, x0 As Double, y0 As Double
        Dim src_img_std As IplImage
        Dim src_img_prob As IplImage
        Dim src_img_gray As IplImage
        Dim storage As CvMemStorage
        Dim lines As CvSeq
        Dim point As Pointer(Of CvPoint), pt1 As Pointer(Of CvPoint), pt2 As Pointer(Of CvPoint)

        '画像の読み込み
        src_img_gray = Cv.LoadImage(filename, LoadMode.Color)
        storage = Cv.CreateMemStorage(0)

        '標準的ハフ変換
        lines = Cv.HoughLines2(src_img_gray, storage, HoughLinesMethod.Standard, 1, Cv.PI / 180, 50, 0, 0)
        For i = 0 To i < lines.Total

            line = CType(lines.GetSeqElem(lines, i), Pointer(Of Single))
            rho = line(0)
            theta = line(1)
            a = Cos(theta)
            b = Sin(theta)
            x0 = a * rho
            y0 = b * rho
            pt1.x = Cv.Round(x0 + 1000 * (-b))
            pt1.y = Cv.Round(y0 + 1000 * (a))
            pt2.x = Cv.Round(x0 - 1000 * (-b))
            pt2.y = Cv.Round(y0 - 1000 * (a))
            Cv.Line(src_img_std, pt1, pt2, Cv.RGB(255, 0, 0), 3, 8, _
                0)
        Next

●エラー一覧

エラー    1    'Public Function GetSeqElem(Of T As Structure)(index As Integer) As T?' に対する引数が多すぎます。
    
エラー    2    構造体 'OpenCvSharp.Pointer(Of Single)' には既定のプロパティがないため、インデックス処理を実行できません。
    
エラー    3    構造体 'OpenCvSharp.Pointer(Of Single)' には既定のプロパティがないため、インデックス処理を実行できません。
    
エラー    4    演算子 '*' は、型 'Double' および 'OpenCvSharp.Pointer(Of Single)' に対して定義されていません。
    
エラー    5    演算子 '*' は、型 'Double' および 'OpenCvSharp.Pointer(Of Single)' に対して定義されていません。
    
エラー    6    'x' は 'OpenCvSharp.Pointer(Of OpenCvSharp.CvPoint)' のメンバーではありません。
    
エラー    7    'y' は 'OpenCvSharp.Pointer(Of OpenCvSharp.CvPoint)' のメンバーではありません。
    
エラー    8    'x' は 'OpenCvSharp.Pointer(Of OpenCvSharp.CvPoint)' のメンバーではありません。
    
エラー    9    'y' は 'OpenCvSharp.Pointer(Of OpenCvSharp.CvPoint)' のメンバーではありません。
> ハフ変換用にopencvを導入し,公開されているサンプルソースコードをVBで使えるように変換しているのですが、行き詰まってしまい質問させて頂きました。

  OpenCVSharp 使ったら?

  ttps://code.google.com/p/opencvsharp/

以上。参考まで
■No31765に返信(オショウさんの記事)
>>ハフ変換用にopencvを導入し,公開されているサンプルソースコードをVBで使えるように変換しているのですが、行き詰まってしまい質問させて頂きました。
>
>   OpenCVSharp 使ったら?
>
>   ttps://code.google.com/p/opencvsharp/
>
> 以上。参考まで

ご返答ありがとうございます!OpenCVSharp導入済みです。不十分な質問で申し訳ありません。
> ご返答ありがとうございます!OpenCVSharp導入済みです。不十分な質問で申し訳ありません。

  導入していないからエラーしているかと思ったが・・・

  サンプルコードなら、検索すれば結構あります。
  ttp://blog.goo.ne.jp/nobotta50/e/f42ea0385cb7e9c3064d1a607eadf4da
  ttp://code.google.com/p/opencvsharp/source/browse/trunk/2.1/OpenCvSharp.Test/Samples/HoughLines.cs?r=33671

  違いを探してみれば?

以上。
■No31767に返信(オショウさんの記事)
>>ご返答ありがとうございます!OpenCVSharp導入済みです。不十分な質問で申し訳ありません。
>
>   導入していないからエラーしているかと思ったが・・・
>
>   サンプルコードなら、検索すれば結構あります。
>   ttp://blog.goo.ne.jp/nobotta50/e/f42ea0385cb7e9c3064d1a607eadf4da
>   ttp://code.google.com/p/opencvsharp/source/browse/trunk/2.1/OpenCvSharp.Test/Samples/HoughLines.cs?r=33671
>
>   違いを探してみれば?
>
> 以上。

ご返答頂きありがとうございます!上記ページなどを参考にしてもう少し頭を捻ってみます。
なんとか解決することができました!ありがとうございました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板