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

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

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

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

Python

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

Q&A

解決済

2回答

1807閲覧

Python opencv グリッド線 コードの意味

lovely

総合スコア28

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/10/17 02:33

以下のサイトのように画像にグリッド線を引きたいと思っていますが、コードの意味が分からないところがあるので質問させていただきます。

https://tat-pytone.hatenablog.com/entry/2019/03/28/233413」

コードです。

python

1import cv2 #OpenCVのインポート 2 3fname = "fish.jpg" #画像ファイル名 4 5y_step=20 #高さ方向のグリッド間隔(単位はピクセル) 6x_step=40 #幅方向のグリッド間隔(単位はピクセル) 7 8img = cv2.imread(fname) #画像を読み出しオブジェクトimgに代入 9 10#オブジェクトimgのshapeメソッドの1つ目の戻り値(画像の高さ)をimg_yに、2つ目の戻り値(画像の幅)をimg_xに 11img_y,img_x=img.shape[:2] 12 13#横線を引く:y_stepからimg_yの手前までy_stepおきに白い(BGRすべて255)横線を引く 14img[y_step:img_y:y_step, :, :] = 255 #??? 15#縦線を引く:x_stepからimg_xの手前までx_stepおきに白い(BGRすべて255)縦線を引く 16img[:, x_step:img_x:x_step, :] = 255 #??? 17 18cv2.imwrite('grid.png',img) #ファイル名'grid.png'でimgを保存

img[y_step:img_y:y_step, :, :] の意味が分かりません。Listのスライスを用いていることはわかります。

ご教授お願い致します。

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

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

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

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

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

jbpb0

2021/10/18 02:21

> img[y_step:img_y:y_step, :, :] の意味 の「y_step:img_y:y_step, :, :」は、画像(img)のどこの画素(配列の要素)に「255」を代入するのか、その位置(場所)です 一番左の「y_step:img_y:y_step」は、画像内の縦方向の位置です 縦方向の位置は、画像の一番上が「0」で、そこから下方向に「1, 2, 3...」と数えます 「y_step:img_y:y_step」の意味は、コメントに書かれてる「y_stepからimg_yの手前までy_stepおき」の通りです 質問のPythonコードの一番下に print(list(range(y_step, img_y, y_step))) を追加して実行したら、ずらーーーっと数値が表示されますが、その数値のそれぞれが、「255」が代入される縦方向の位置です 真ん中の「:」は、画像内の横方向の位置で、「:」は「全部」という意味なので、画像の一番左から一番右までの「全部」になります それで、横線になります 一番右の「:」は、色(BGR)のどれかを表し、「:」は「全部」という意味なので、3色(BGR)の全部に「255」が代入されます 3色(BGR)の全部が「255」の場合は、その画素は「真っ白」です 以上により、 ・画像の縦方向は選択された位置のみ ・画像の横方向は一番左から一番右まで全部 ・色は3色(BGR)全部 に「255」が代入され、「真っ白」な横線ができます
guest

回答2

0

ベストアンサー

  • Listのスライスを用いていることはわかります。

listではなく、numpy.ndarrayのスライスです。
画像にグリッド線を引くにもそう書いてあります。

cv2.imreadで読んだ画像はnumpy.ndarrayになります。
詳しくは、Python, OpenCVで画像ファイルの読み込み、保存(imread, imwrite)をお読みください。
numpy.ndarray

numpy.ndarrayのスライスについては、NumPy配列ndarrayのスライスによる部分配列の選択と代入
お読みください。

実際にやっていることは、nemoplusさんが書かれているとおりです。
ただし、cv2がimreadで読み込んだ画像の色並びはRGBではなくBGRであることに注意してください。

投稿2021/10/17 03:36

ppaul

総合スコア24670

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

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

0

スライスをご理解いただいているようですので、
「:」に省略された内容を埋めてみると理解できるかと思われます。

Python

1img[y_step:img_y:y_step, 0:img_x:1 , 0:3:1] = 255 2img[ 0:img_y:1 , x_step:img_x:x_step, 0:3:1] = 255

白い横線を引きたい場合、X軸はゼロから右端まで、色空間RBGをすべて 255 に置き換えることになります。

投稿2021/10/17 03:15

nemoplus

総合スコア161

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問