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

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

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

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

Python

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

Q&A

1回答

1783閲覧

Pythonで画像が表示できずエラーが出てしまう

asagi_go

総合スコア10

OpenCV

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

Python

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

0グッド

0クリップ

投稿2019/01/31 07:57

前提・実現したいこと

Pythonを使ったプログラムを作っています。
画像を明るくしたいのですが途中でエラーが出てしまいます。
プログラムのimg_gammaのところで出てきます。

発生している問題・エラーメッセージ

cv2.error:OpenCV(3.4.4) C:\projects\opencv-python\opencv\modules\ core\src\matrix.cpp:406: error: (-215:Assertion failed) m.dims >= 2 in function 'cv::Mat::Mat'

該当のソースコード

import cv2 import numpy as np gamma = 0.5 gamma_cvt = np.zeros((256,1),dtype = 'uint8') for i in range(256): gamma_cvt[i][0] = pow(float(i)/255, 1.0/gamma) * 255 img_org = cv2.imread("test10.png", 1) img_gamma = cv2.LUT(img_org, gamma_cvt) cv2.imshow("original",img_org) cv2.imshow("gamma",img_gamma) cv2.waitKey(0) cv2.destroyAllWindows()

補足情報(FW/ツールのバージョンなど)

Python3.6

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

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

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

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

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

guest

回答1

0

numpy を使うと、ガンマ補正の全画素の変換を一度に行えます。

  1. 255 * (value / 255)^(1 / gamma) を計算する。
  2. [0, 255] の範囲にクリップする。

python

1import numpy 2import cv2 3import matplotlib.pyplot as plt 4 5img = cv2.imread('sample.jpg') 6 7def rectify(img, gamma): 8 img = 255 * (img / 255)**(1 / gamma) 9 # 範囲を [0, 255] にクリップし、型を uint8 にする。 10 img = np.clip(img, 0, 255).astype(np.uint8) 11 return img

結果描画

イメージ説明

元画像

python

1gammas = np.linspace(0.2, 2.0, 9) 2 3cols = 3 4rows = np.ceil(len(gammas) / cols) 5fig = plt.figure(figsize=(10, 2.5 * rows)) 6 7for i, g in enumerate(gammas, 1): 8 # ガンマ補正 9 out = rectify(img, gamma=g) 10 11 ax = fig.add_subplot(rows, cols, i) 12 ax.imshow(out) 13 ax.axis('off') 14 ax.set_title('gamma={:.2f}'.format(g)) 15plt.show()

イメージ説明

python

1fig, ax = plt.subplots() 2 3xs = np.arange(0, 256) 4for g in gammas: 5 ys = rectify(xs, g) 6 ax.plot(xs, ys, label='gamma={:.2f}'.format(g)) 7ax.legend() 8plt.show()

イメージ説明

x 軸: 変換前の値
y 軸: 変換後の値

投稿2019/01/31 08:26

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問