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

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

新規登録して質問してみよう
ただいま回答率
85.49%
OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

11283閲覧

ハフ変換の直線検出がうまくいきません

syayo

総合スコア22

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/06/19 00:06

ハフ変換による直線検出を勉強しています。
ここのサイトを参考に、同じ画像で同じコードを使ってもサイトのような直線検出を表示できませんでした。

どのようにすれば検出できるのでしょうか?

Python

1import cv2 2import numpy as np 3 4img = cv2.imread('dave.jpg') 5gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 6edges = cv2.Canny(gray,50,150,apertureSize = 3) 7 8lines = cv2.HoughLines(edges,1,np.pi/180,200) 9for rho,theta in lines[0]: 10 a = np.cos(theta) 11 b = np.sin(theta) 12 x0 = a*rho 13 y0 = b*rho 14 x1 = int(x0 + 1000*(-b)) 15 y1 = int(y0 + 1000*(a)) 16 x2 = int(x0 - 1000*(-b)) 17 y2 = int(y0 - 1000*(a)) 18 19 cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) 20 21cv2.imwrite('houghlines3.jpg',img)

実行後の画像

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2018/06/19 01:41

元画像「dave.jpg」の取得先(リンクURLなど)を提示ください。
guest

回答1

0

ベストアンサー

ハフ変換による直線検出で示されたソースコードでは、検出された最初の1直線しか描画されないようです。
検出された全直線を描画するようなソース

Python

1import cv2 2import numpy as np 3 4img = cv2.imread('dave.jpg') 5gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 6edges = cv2.Canny(gray,50,150,apertureSize = 3) 7 8lines = cv2.HoughLines(edges,1,np.pi/180,200) 9print(len(lines)) # 20本 10for line in lines: 11 for rho,theta in line: 12 a = np.cos(theta) 13 b = np.sin(theta) 14 x0 = a*rho 15 y0 = b*rho 16 x1 = int(x0 + 1000*(-b)) 17 y1 = int(y0 + 1000*(a)) 18 x2 = int(x0 - 1000*(-b)) 19 y2 = int(y0 - 1000*(a)) 20 21 cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) 22 23cv2.imwrite('houghlines3.jpg',img)

にてWhere can I locate the demo image dave.jpg? [closed]にあげられた画像を利用した結果は以下のようになりました。
イメージ説明

投稿2018/06/19 02:00

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syayo

2018/06/19 08:04

ありがとうございました。 解決しました。 教えてくださったコードに linesのパラメータを調整したところうまくいきました。
can110

2018/06/19 08:08

おそらく元画像のサイズが小さかったのだと思われます。 その場合は、HoughLines関数の第4引数=検出可能な線の長さの最小値も小さい値を与える必要があります。
syayo

2018/06/20 00:04

おっしゃる通り、画像のサイズが小さかったです。 ありがとうございます。 パラメータの意味もしっかり学びます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問