質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3680閲覧

AVFoundationで撮った写真の縦横比について

meia

総合スコア26

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/15 14:41

###前提・実現したいこと
環境は以下の通りです
xcode 7.3.1
swift

もし質問におかしな部分やたりない情報があれば、教えていただける助かります

現在カメラで写真を撮って、OpenCVを利用するアプリを考えています。

そこでカメラ機能については
[Swift] [iOS] ズーム、ピント調節可能な無音カメラのサンプル
を参考にさせていただいたのですが、自分では解決できない疑問が生まれたので、ここで質問させていただきました。

このコード通りにして、写真を撮ると縦にサイズの長い写真が保存されます。
OpenCVを利用するのに映る範囲を絞った方がいいと考えたのですが、うまくいきませんでした。

どなたか回答のほどよろしくお願いします

###該当のソースコード

// sampleBufferからUIImageを作成 func captureImage(sampleBuffer:CMSampleBufferRef) -> UIImage{ // Sampling Bufferから画像を取得 let imageBuffer:CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)! // pixel buffer のベースアドレスをロック CVPixelBufferLockBaseAddress(imageBuffer, 0) let baseAddress:UnsafeMutablePointer<Void> = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0) let bytesPerRow:Int = CVPixelBufferGetBytesPerRow(imageBuffer) let width:Int = CVPixelBufferGetWidth(imageBuffer) let height:Int = CVPixelBufferGetHeight(imageBuffer) // 色空間 let colorSpace:CGColorSpaceRef = CGColorSpaceCreateDeviceRGB()! let newContext:CGContextRef = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, CGImageAlphaInfo.PremultipliedFirst.rawValue|CGBitmapInfo.ByteOrder32Little.rawValue)! let imageRef:CGImageRef = CGBitmapContextCreateImage(newContext)! let resultImage = UIImage(CGImage: imageRef, scale: 1.0, orientation: UIImageOrientation.Right) return resultImage }

###試したこと

なんとなくCGBitmapContextCreateImageの部分をいじれば、写真の大きさをいじれるのだということはわかったのですが、それから進みません。

縦に長い写真が短くするために試しにheightを0.75倍にしようとしてみたのですが、CGBitmapContextCreateImageがIntをとるため、エラーが出ました。
CVPixelBufferGetHeight()の戻り値もIntであるため、Int()などを使って、計算過程だけDoubleにすることもできませんでした。

解決策をご存知の方がいらしたら、よろしくお願いします

もしくは、どこか方法や考えが適切でないということなら、指摘していただけると勉強になります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/09/16 00:50

タイトルにある「縦横比」について質問内に記述が無いように思うのですが、「OpenCVを利用するのに映る範囲を絞った方がいい」というのが「縦横比を変更したい」ということなのでしょうか?
meia

2016/09/16 07:19

速い回答ありがとうございます!「縦横比を変更したい」縦長の写真を、標準カメラアプリくらいのアスペクト比にトリミングしたいということです。 とりあえずUIImageのリサイズを試してみます!!
guest

回答1

0

ベストアンサー

UIImageにした後でリサイズするのではダメなのでしょうか?
それでいいなら「UIImage リサイズ」でググって下さい。

追記

適当に弄ってたら出来ました。

swift

1let width:Int = CVPixelBufferGetWidth(imageBuffer) * 75 / 100 //0.75倍

これで3:4になりました。

UIImageViewを生成しているところで、

swift

1imageView = UIImageView() 2imageView.contentMode = .ScaleAspectFit

こうしておくと見た目のまま撮れます。

投稿2016/09/16 00:23

編集2016/09/16 08:19
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meia

2016/09/16 12:33

わざわざやっていただいてありがとうございます! * 0.75にするとエラーが出るのに分数にするとエラーが出ないというのには気づきませんでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問