主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PixbufからIplimageへの変換 convert a pixbuf image to iplimage on python

                
遊びでデスクトップ画像をOpenCVに掛けてみた→ デスクトップ画像で顔認識
そのときにデスクトップのキャプチャをGTKで行ったために、イメージがpixbuf構造体で与えられていてiplimageに変換する必要があった。なんでわざわざGTKでキャプチャしたかは処理時間の都合→pythonでのスクリーンショットの撮り方スクリーンキャプチャ

そのときのスクリプトの要約
**************************************
#-*- coding: utf-8 -*-

import gtk,cv
import time

width,height=503,500
x,y=0,0

pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, width, height)
pixbuf.get_from_drawable(gtk.gdk.get_default_root_window(), gtk.gdk.colormap_get_system(), x, y, 0, 0, width, height)
step=pixbuf.get_rowstride()
cv_im = cv.CreateImageHeader((width,height),cv.IPL_DEPTH_8U,3)
cv.SetData(cv_im, pixbuf.get_pixels(), step)
cv.CvtColor(cv_im,cv_im,cv.CV_BGR2RGB)

cv.ShowImage("result", cv_im)
**************************************

cv.SetData(cv_im, pixbuf.get_pixels(), step)
stepをpixbuf.get_width()*3にしないのが肝。
そうしてしまうとメモリ参照がずれるのか、以下のように正しい画像データが得られない。
naname.png

あくまでstepはpixbuf.get_rowstride()で、横幅を正しく参照する。
correct.png

本ブログのOpenCVまとめ
OpenCV
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。