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

スポンサーサイト

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

pythonでのcvPoint2D32fの使い方 OpenCV in python

                
tags: python opencv
OpenGLとOpenCVを行ったり来たり。

ふと思ったのだけど、一枚のテクスチャをグリグリ回転させたりするなら幾何学の変換を使えば十分。OpenGLのようにわざわざオブジェクトを置いて、テクスチャ貼って、ライトとカメラを設置するのは手間だ。なので今回はOpenCVの幾何学変換で画像をちょっといじってみる。ちなみに…Imageモジュールやcairoを使っても同様のことはできると思う。
101210.jpg
1012102.jpg


↓のCスクリプトを基本に、画像を90度回転させるスクリプトを書いてみた。
OpenCV.jp
ちょっとネックになったのがcvPoint2D32fの扱い。pythonのcvモジュールの中を探してもcvPoint2D32fはない。
公式ドキュメントではどういう関数かの説明だけ。ググっても英語、日本語で両方とも「pythonではどう使うんでしょう?」に回答なし。

いくらか検索の末、ウィローガレージのところで「ただタプルとして使えい」の一文を見つける。
http://opencv.willowgarage.com/wiki/PythonInterface
なので座標をタプルにして、それらをリストにまとめたらcv.GetPerspectiveTransformが受け取ってくれた。
具体的には↓のスクリプトを参照。

# coding: utf-8

import pygame
##import numpy

import Image,cv
import time

warp_matrix =cv.CreateMat(3,3,cv.CV_32FC1)
image=cv.LoadImage('app_B00064X8T0l.jpg')
dst_img = cv.CloneImage (image)
src_pnt = [(0, 0),(0, image.height),(image.width, image.height),(image.width, 0)]
dst_pnt = [(0, 0),(0, image.height),(image.width, image.height),(image.width, 0)]

map_matrix = cv.CreateMat (3, 3, cv.CV_32FC1)
cv.GetPerspectiveTransform (src_pnt, dst_pnt, map_matrix);
cv.WarpPerspective (image, dst_img, map_matrix, cv.CV_INTER_LINEAR + cv.CV_WARP_FILL_OUTLIERS, cv.ScalarAll (1))
cv.NamedWindow('h',1)
cv.ShowImage('h',dst_img)

for k in range(0,500,10):
dst_pnt = [(k, 0),(0, image.height-k),(image.width-k, image.height),(image.width, 0+k)]
cv.GetPerspectiveTransform (src_pnt, dst_pnt, map_matrix);
cv.WarpPerspective (image, dst_img, map_matrix, cv.CV_INTER_LINEAR + cv.CV_WARP_FILL_OUTLIERS, cv.ScalarAll (1))
cv.ShowImage('h',dst_img)
if cv.WaitKey(10) >= 0:
break


あ、また今回も__main__を使っていない…
そろそろちゃんとした書式で書かなければ。
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

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

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