質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • C#

    6843questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • OpenCV

    1018questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

ハフ変換において、GetSeqElemでエラーが出ます。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 438

keisuke1995

score 8

ハフ変換を使って直線を検出し、結果を描画するために情報を取り出したいのですが、なぜかハフ変換後のfor分の中にあるGetSeqElemでエラーが出ます。
コードは以下のようになっています。原因と改善策を教えていただけませんでしょうか?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenCvSharp;
using System.Diagnostics;


namespace tyouten
{
    class Program
    {
        static void Main(string[] args)
        {

            IplImage imgSrc = new IplImage("C:\\pictures\\test1.jpg", LoadMode.Color);  // 入力画像
            IplImage imgGray = new IplImage("C:\\pictures\\test1.jpg", LoadMode.GrayScale); // グレー画像
            IplImage imgBinary = new IplImage(imgSrc.Size, BitDepth.U8, 1);            // 二値化用の画像

            // 範囲外を黒く塗りつぶす
            Cv.Rectangle(imgSrc, new CvPoint(0, 0), new CvPoint(160, 576), new CvScalar(0, 0, 0), -1);
            Cv.Rectangle(imgSrc, new CvPoint(900, 0), new CvPoint(1024, 576), new CvScalar(0, 0, 0), -1);

            // グレー画像へ変換
            Cv.CvtColor(imgSrc, imgGray, ColorConversion.BgrToGray);
            // 二値化
            Cv.Threshold(imgGray, imgBinary, 0.01, 255, ThresholdType.Otsu);          

            // ノイズ除去
            Cv.Dilate(imgBinary, imgBinary, null, 1);                 // 膨張処理
            Cv.Erode(imgBinary, imgBinary, null, 1);                  // 収縮処理
            Cv.Erode(imgBinary, imgBinary, null, 1);                  // 収縮処理
            Cv.Dilate(imgBinary, imgBinary, null, 1);                 // 膨張処理

            // エッジ検出
            Cv.Canny(imgBinary, imgBinary, 3, 3);

            // ハフ変換
            CvMemStorage storage = new CvMemStorage();
            CvSeq lines = Cv.HoughLines2(imgBinary, storage, HoughLinesMethod.Standard, 1, Math.PI / 180, 120);

            for (int i = 0; i < lines.Total; i++)
            {
                CvLineSegmentPolar elem = lines.GetSeqElem(i).Value;
                float rho = elem.Rho;
                float theta = elem.Theta;
                double a = Math.Cos(theta);
                double b = Math.Sin(theta);
                double x0 = a * rho;
                double y0 = b * rho;
                CvPoint pt1 = new CvPoint(Cv.Round(x0 + 10000 * (-b)), Cv.Round(y0 + 10000 * (a)));
                CvPoint pt2 = new CvPoint(Cv.Round(x0 - 10000 * (-b)), Cv.Round(y0 - 10000 * (a)));
                imgSrc.Line(pt1, pt2, CvColor.Red, 1, LineType.AntiAlias, 0);
            }


            Cv.ShowImage("src", imgSrc);
            Cv.ShowImage("binary", imgBinary);
            Cv.ShowImage("gray", imgGray);
            Cv.WaitKey();
            Cv.DestroyAllWindows();
        }
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2018/01/09 20:55

    エラーメッセージも書いてください。行数があるならそれが提示のコードのどこにあたるのかも。記憶や翻訳でなくそのままコピペしてください。

    キャンセル

  • keisuke1995

    2018/01/10 14:00

    すいません。エラーメッセージの明示をわすれてました。メッセージは、「エラー CS0411 メソッド 'CvSeq.GetSeqElem<T>(int)' の型引数を使い方から推論することはできません。型引数を明示的に指定してください。」です。47行目において、メッセージが表示されてます。

    キャンセル

回答 1

checkベストアンサー

0

ジェネリック型が指定されていないというエラーですね。

GetSeqElem<CvLineSegmentPolar>(i)


のようにジェネリック型を指定してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 14:40

    おかげで、ハフ変換の結果の描画ができました。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    js array forEach内で走る非同期処理の終了タイミングをひろう方法について

    配列をforEachでまわし、内側で走る非同期処理がすべて終了したタイミングをひろい、次の処理に続けたい場合どのような方法があるでしょうか?node.js で keyの配列をfor

  • 解決済

    値の小数点第3位以下を四捨五入し、表示させる

    jspから受け取ってactionで計算したBMIの値を小数点第3位以下を四捨五入してjspで表示させたいのですが、 小数点云々のことは調べてもmath.roundなどSystem

  • 解決済

    「3 Coins Shop」の商品価格

    前提・実現したいこと 注)困っていることではありません。好奇心からの質問です。 下記のような課題があったとします。 1円、5円、10円、50円、100円、500

  • 解決済

    C#

    C#について解決いたしました。本当に助かりました。またどうぞ宜しくお願いいたします。

  • 解決済

    EMF形式の画像を劣化させずに加工したい

    EMF形式の画像ファイルの、下30ピクセルを白く塗って、文字を足して再びEMF形式で保存しなおす、というのをしたいと考えています。 いったんBitmap形式で取り込んで加工し

  • 解決済

    画像と文字列を同時に送りたい(PHP->Android)

    前提・実現したいこと サーバ側PHPでDBからSELECTした画像及び文字列を、Android端末に渡したいと考えています。 画像単体の受け渡しには成功したのですが、同時に文字

  • 解決済

    C# wave 出力方法について

    前提・実現したいこと C# kinect等の音声機器で取得した音声データを,「○○.wav」のファイルに保存したいです. 発生している問題・エラーメッセージ `

  • 解決済

    OpenCvSharp3で重心を求めたいです

    以下のように、ラベリングを実行するプログラムはできたのですが、ここから重心の座標や面積を求めるプログラムを作成したいです。どなたか、教えていただけますか? 最終的な目標としては

同じタグがついた質問を見る

  • C#

    6843questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • OpenCV

    1018questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。