画像処理は、OpenCV で

2016-10-03 :  PCクリニック
某プログラムのテスト入力用に、
16bpp 画像を生成するプログラムを作ることになった。

ここは、当然(?)“GSL Shell”で作る!

それで、
16bpp画像なので、書き出しは“OpenCV”とした。

8ヶ月前(2016-02-27)の記事「GSL Shell 学習:モジュールの作り方
で書いた、
自作の“cv2.lua”モジュールを使う。

主な部分のコードは、・・・・・
local cv2 = require'cv2'

img = cv2.cvCreateMat( rows, cols, 2 ) -- 出力画像領域 ( 第3引数は、CV_16UC1 )

----- img に値設定。

cv2.cvSaveImage( charA('test.tif'), img, 0 ) -- 第3引数はダミー?
の様な感じ。

出来た 'test.tif' 画像は、

PictBear
や、
XnView
で確認出来た。


そして、
テストしたい某プログラムは、Python で書かれていて、
現状は 8bpp 画像用である。
なので、
2年前(2014-03-22)の記事「Python 学習:16bpp 白黒TIFF画像入力
で書いた方式:
##### 方式1 #####
import matplotlib.pyplot as plt
img = plt.imread( 'test.tif' )

##### 方式2 #####
from PIL import Image
import numpy as np
im = Image.open( 'testa.tif' )
img = np.array( im )

##### 以下、
##### img から値を得て、処理。

の通り。

現状 Python プログラムは、“Pillow”を使った方式2なので、
そのままで、OK

ところが動作がオカシイ?????


取り敢えず、“matplotlib”を使う方式1に変更。

でも、動作がオカシイ?????


?????????????????????

ここで、Q&Aのタイトルをよく見ると、

 ~ uncompressed 16-bit TIFF images ~

とある!!!


そうか、OpenCV の出力は圧縮している?


試しに、Python での入力を変えてみた。

matplotlib や、Pillow じゃなくて、OpenCV で読み込む:
img = cv2.imread( inp_tif, -1 )
これで、正常に動いた!


そうすると、

結論:
“GSL Shell”でも、“Python”でも、
画像入出力は“OpenCV”に統一する。


因みに、
“GSL Shell”での“cvCreateMat”の第3パラメータは:

CV_8UC1 == 0
CV_16UC1 == 2
CV_8UC3 == 16

参照:OpenCV:CV_8UC3

ですね。

なお、
画像ファイルの読み込みは、

  img = cv2.cvLoadImageM( charA('hoge.tif'), type )

の様なコードで行う。
( type は、-1,0,1 のいずれか )


また、GSL Shellの場合では、

CvMat型画像データの各画素へのアクセスは、
(自作の“cv2.lua”モジュール内で定義している):Byte や、Word ポインタ
を使って、
一次元配列:img.Byte[] や、img.Word[]
の要素へのアクセスとなる。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160913,17
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク