OpenCV 学習:任意のタイプの画像表示+alpha

2017-04-03 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
1月(2017-01-18)の記事「OpenCV 学習:CvMat型の type 項目」で書いた、

  入力する画像ファイルのタイプ判別方法

を使って、・・・・・

1.グレースケール限定だが、任意のタイプの画像を対象に、

2.対象画像は、ドラッグ&ドロップで読み込み、

3.256階調で表示し、

4.マウスカーソル位置の画素値を表示する。

と云ったプログラムを作った。

ここで、表示する値は、画像ファイル内の真の値。
但し、表示先はコンソール。


対象とする画像の type 項目値は、
 ・ 0x42424000:8ビット整数
 ・ 0x42424002:16ビット整数
 ・ 0x42424004:32ビット整数
 ・ 0x42424005:32ビット浮動小数点数
 ・ 0x42424006:64ビット浮動小数点数
としているが、
OpenCV では、
本来 0x42424004 とすべきものも0x42424005となる???


なお、画素値の表示には、
afxLua / cio モジュールを使った。
(常に同じ位置に表示する為)


それで、
出来上がったのは、・・・・・
----- DnD_img_mouse_CV.gsl -----
require 'cio'
local cv2 = require'cv2'
local lfs = require'lfs'
function split_path( p ) return string.match( p, "(.-)([^\\]-([^%.]+))$" ) end
function CHK_IF( pt )
local t, n = 5, 0; while pt[n]==0 do n=n+1 end --- 必ず終わるハズ!!!
if math.abs(pt[n])<2^29 then t=4 end
return t
end
fmt = string.format
---------------------------------------
Dir, Fname, Fext = split_path( arg[1] ) -- D&D でファイル名取得
lfs.chdir( Dir ) -- これがないとダメ
-- =========================================
local onmouse = ffi.cast( 'CvMouseCallback', function(event,x,y,flags)
if event == 0 then -- cv2.EVENT_MOUSEMOVE:

cio.gotoxy(0,3)
print( fmt('Pos:(%d,%d)=%g ', x, y, IMG[y*xx+x] ) )

end
end )
-- =========================================
img = cv2.cvLoadImageM( Fname, -1 ) -- ファイル内のママ
yy, xx, typ = img.yy, img.xx, img.type%256
if typ == 0 then IMG=img.Byte
elseif typ==2 then IMG=img.Word
elseif typ==4 then IMG=img.Int ----- これ存在し得ない???
elseif typ==5 then IMG=img.Int
typ=CHK_IF(IMG)
if typ==5 then IMG=ffi.cast('float*',IMG) end
elseif typ==6 then IMG=img.Dbl
else IMG=img.Byte -- typ==16:BGR --今後に
end
Mx, Mn = -1e+100, 1e+100
for n=0,xx*yy-1 do
if IMG[n]>Mx then Mx=IMG[n] end
if IMG[n]end

dsp = cv2.cvCreateMat( yy, xx, 0 )
for n=0,xx*yy-1 do dsp.Byte[n]=(IMG[n]-Mn)/(Mx-Mn)*255+0.5 end

cv2.cvNamedWindow( charA('img'), 0 )
cv2.cvSetMouseCallback( charA('img'), onmouse )

FT={ '8I', '', '16I', '', '32I', '32F', '64F' }; FT[16+1]='BGR_B'
cio.gotoxy(0,0) --- 左上に位置づけ
print( 'ESC key <=== Exit' )
print( fmt('File Type: %s. Size: %dx%d', FT[typ+1], xx, yy) )
print( fmt('Value : Max=%g, Min=%g', Mx, Mn) )
while true do
cv2.cvShowImage( charA('img'), dsp )
k = bit.band( 0xFF, cv2.cvWaitKey(50) ) -- key bindings
if k == 27 then break end --「esc」to exit
end

cv2.cvDestroyAllWindows() -- 後処理
OK


本日はここまで。


GSL Shell ( Lua ) / OpenCV 学習は続く。


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


161223
関連記事
スポンサーサイト

コメントの投稿

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

おきてがみ/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
ブックマーク