image_viewer 自作

2017-11-01 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
7ヶ月前(2017-04-03)の記事:
OpenCV 学習:任意のタイプの画像表示+alpha」に載せた、
DnD_img_mouse_CV.gsl は、“グレースケール限定”だった。


今回、この制限を解除すべく、

1.機能拡張を行う。

序でに、

2.'cv2' モジュールの代わりに 'cv2_a' モジュールを使う。

3.'lfs' モジュールの代わりに 'Penlight' モジュールを使う。


それで、
出来上がったのは、・・・・・
----- DnD_image_viewer.gsl -----
require 'cio'; require'pl'; require'cv2_a'
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
-------------------------------------
Dir, Fname = path.splitpath( 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)
if typ>10 then pt=3*(y*xx+x)
b,g,r = IMG[pt],IMG[pt+1],IMG[pt+2]
print( string.format('Pos:(%d,%d)=%g,%g.%g ', x, y, r,g,b ) )
else
print( string.format('Pos:(%d,%d)=%g ', x, y, IMG[y*xx+x] ))
end
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 typ=16; IMG=img.Byte ----- RGB 画像  ※ 今回機能追加
end

FT={ '8I', '', '16I', '', '32I', '32F', '64F' }; FT[16+1]='BGR'

if typ>10 then --- カラー画像 ------

dsp = cv2.cvCreateMat( yy, xx, 16 )
for n=0,3*xx*yy-1 do dsp.Byte[n]=IMG[n] end

cv2.cvNamedWindow( charA('img'), 0 )
cv2.cvSetMouseCallback( charA('img'), onmouse, NULL )
cio.gotoxy(0,0)
print( 'ESC key <=== Exit' )
print(string.format('File Type: %s. Size: %dx%d', FT[typ+1], xx, yy))
print( 'Value : R, G, B' )
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

else ----- GrayScale画像 -------

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, NULL )
cio.gotoxy(0,0)
print( 'ESC key <=== Exit' )
print(string.format('File Type: %s. Size: %dx%d', FT[typ+1], xx, yy))
print(string.format('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 → exit
end

end

cv2.cvDestroyAllWindows() -- 後処理
これで、・・・・・

対象とする画像の 種類は、
 ・ 8ビット整数
 ・ 16ビット整数
 ・ 32ビット整数
 ・ 32ビット浮動小数点数
 ・ 64ビット浮動小数点数
 ・ RGB(8ビット整数×3)
となる。


本日はここまで。


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


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
10 | 2017/11 | 12
- - - 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 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク