teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

2021/12/19 14:38

投稿

退会済みユーザー
answer CHANGED
@@ -12,4 +12,8 @@
12
12
  Matplottlibであればもう少し柔軟に対応できますが、表示までのラグやなんやらを考えるとちょっとうっとおしいですよね…。値が255を超えるようであれば、初めから`uint8`にすると桁落ちしてしまうので、`uint16`や`uint32`にしたり、多少誤差も許されるのであれば`float16`なんかでもいいと思います。なんにせよ負の数になりえるか、正の数だけでよいか、最大値がいくらか、で適当にtypecastを帳尻合わせしてください。
13
13
 
14
14
  **追補2**
15
+ > fourteenlength様やukyoda様にコメント頂いた方法で1行目の処理は実現可能と理解しましたが、
16
+ 2行目のif等を各画素に対して行うにはどのような方法がありますでしょうか。
17
+ よろしくお願いします。
18
+
15
19
  [np.where()](https://note.nkmk.me/python-numpy-where/)を使うと条件一致した値だけ処理できます。forのネストをぶん回す代わりに、まずval=ax+bのような計算をしてしまって、その後にvalが指定値より大きいところを`np.where`で抽出したらいいですね。リンク先の**「条件を満たす要素を処理」**のところがまんまこのやりたいことになると思います。

2

2021/12/19 14:38

投稿

退会済みユーザー
answer CHANGED
@@ -6,7 +6,10 @@
6
6
 
7
7
 
8
8
  **どうしてもForを使ってNumpyの計算を早くしたい**のであれば、Pythonの裏側で最適化を図る[Numba](https://qiita.com/gyu-don/items/9d223b007ca620e95abc)を検討ください。
9
- **
9
+
10
- 追補**
10
+ **追補**
11
11
  OpenCVのグレースケールで表示させる場合、`uint8`の縛りがあります。計算した値を最後に0-255でスケールさせるか、計算結果が0-255からはみ出ないようにnp.clip()のような関数を使って無理やりはみ出た部分を切り落とす必要があります。
12
- Matplottlibであればもう少し柔軟に対応できますが、表示までのラグやなんやらを考えるとちょっとうっとおしいですよね…。
12
+ Matplottlibであればもう少し柔軟に対応できますが、表示までのラグやなんやらを考えるとちょっとうっとおしいですよね…。値が255を超えるようであれば、初めから`uint8`にすると桁落ちしてしまうので、`uint16`や`uint32`にしたり、多少誤差も許されるのであれば`float16`なんかでもいいと思います。なんにせよ負の数になりえるか、正の数だけでよいか、最大値がいくらか、で適当にtypecastを帳尻合わせしてください。
13
+
14
+ **追補2**
15
+ [np.where()](https://note.nkmk.me/python-numpy-where/)を使うと条件一致した値だけ処理できます。forのネストをぶん回す代わりに、まずval=ax+bのような計算をしてしまって、その後にvalが指定値より大きいところを`np.where`で抽出したらいいですね。リンク先の**「条件を満たす要素を処理」**のところがまんまこのやりたいことになると思います。

1

追補

2021/12/19 14:38

投稿

退会済みユーザー
answer CHANGED
@@ -5,4 +5,8 @@
5
5
  もう少し凝った計算であれば[ガンマ補正](https://pystyle.info/opencv-tone-transform/)や[cv2.add](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html)あたりで調べると使えそうな内容が出てくると思います。
6
6
 
7
7
 
8
- **どうしてもForを使ってNumpyの計算を早くしたい**のであれば、Pythonの裏側で最適化を図る[Numba](https://qiita.com/gyu-don/items/9d223b007ca620e95abc)を検討ください。
8
+ **どうしてもForを使ってNumpyの計算を早くしたい**のであれば、Pythonの裏側で最適化を図る[Numba](https://qiita.com/gyu-don/items/9d223b007ca620e95abc)を検討ください。
9
+ **
10
+ 追補**
11
+ OpenCVのグレースケールで表示させる場合、`uint8`の縛りがあります。計算した値を最後に0-255でスケールさせるか、計算結果が0-255からはみ出ないようにnp.clip()のような関数を使って無理やりはみ出た部分を切り落とす必要があります。
12
+ Matplottlibであればもう少し柔軟に対応できますが、表示までのラグやなんやらを考えるとちょっとうっとおしいですよね…。