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

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

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

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

4951閲覧

Python,OpenCVで画像をグレースケールで読み込むと、2次元配列になるはずですが…

physics303

総合スコア89

OpenCV

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/07/05 00:46

画像を0001.jpegグレースケールで読み込んでprintします。

python

1X = cv2.imread("0001.jpeg",0) 2print(X)

私はてっきり、グレースケールの画像は二次元配列になっているはずです。実際、出力結果は

[[ 77 69 65 ... 10 8 28]
[ 69 67 68 ... 3 0 0]
[ 69 68 68 ... 18 11 5]
...
[123 123 123 ... 157 157 157]
[123 123 123 ... 157 157 157]
[123 123 123 ... 157 157 157]]

といった形で2次元配列になっています。しかし、素朴な疑問として、二次元配列なら、

[[ 77 69 65 ... 10 8 28],
[ 69 67 68 ... 3 0 0],
[ 69 68 68 ... 18 11 5],
...
[123 123 123 ... 157 157 157],
[123 123 123 ... 157 157 157],
[123 123 123 ... 157 157 157]]

と、各行の最後にコンマがつくのではないでしょうか。なぜ画像をprintしたときは、,がつかないのでしょうか。画像をprintしたときにあらわれる数字の羅列は実は二次元配列ではないのでしょうか?

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

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

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

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

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

fuzzball

2018/07/05 01:08 編集

とりあえず型調べてみたら?
guest

回答2

0

ベストアンサー

もう回答が出ているようですが、

import numpyせずともエラーがでないのはなぜでしょうか

cv2の中でimportしているのでそれで良い、と思ってください。

見た目の違いは、「python str repr」とかで検索すると理解できるでしょう。

python

1>>> import numpy as np 2>>> a = np.array([[1,2],[3,4]]) 3>>> print(str(a)) 4[[1 2] 5 [3 4]] 6>>> print(repr(a)) 7array([[1, 2], 8 [3, 4]]) 9

投稿2018/07/05 05:49

hayataka2049

総合スコア30933

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

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

physics303

2018/07/09 06:20

なるほど。つまり、やはり、グレースケールの画像は二次元配列、というのは正しいのですね。そして、pythonの仕様上、デフォルトでは人間にわかりやすいように表示してくれているのですね。ご丁寧にありがとうございました。とてもよくわかりました。
guest

0

正確にはimreadの戻り値はnumpyオブジェクトです。
numpyクラスがオブジェクトを文字列化するやり方が単純なリストオブジェクトとは異なっているというだけの話かなと思います。

投稿2018/07/05 00:54

kazto

総合スコア7196

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

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

physics303

2018/07/05 01:06

imreadの戻り値がnumpyオブジェクトならimport numpyしないとエラーが出るのではないでしょうか?import numpyせずともエラーがでないのはなぜでしょうか。また、numpyを使って多次元配列をつくるときは、Y=np.array([[1,2,3], [4,5,6]])などとすると思いますが、このときprint(Y)すると array([[1,2,3], [4,5,6]]) と表示されますよね。すると、imreadの戻り値がnumpyオブジェクトなら、 array([[ 77 69 65 ... 10 8 28], [ 69 67 68 ... 3 0 0], [ 69 68 68 ... 18 11 5], ... [123 123 123 ... 157 157 157], [123 123 123 ... 157 157 157], [123 123 123 ... 157 157 157]]) となるはずですよね。不思議です。
kazto

2018/07/05 01:13

逆に伺いたいのですが、カンマのあるなしによって何かお困りごとがおありでしょうか。 単に不思議、というだけでしたら、表示だけの問題と思われますし、深く拘泥する必要性を感じない、というのが正直な感想です。 ときにはスルー力も大事と思います。
physics303

2018/07/05 01:15

何も困っていません。 ただ、なぜこんな仕様になっているのか、カンマを抜くことでメリットがあるのか、など気になってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問