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

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

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

2回答

3092閲覧

cvSeqをmatに変換したい

sakittyo

総合スコア16

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2017/01/05 04:12

###前提・実現したいこと
opencv内にあるcv::approxPolyDPを使いたいのですが引数にmatを用いる必要があり困っています。いれようと思ってる構造体がcvSeqで作ってしまってる為変換の方法を教えてください。

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

C++

1#import "MonochromeFilter.h" 2#import "OpenCVUtil.h" 3 4@implementation MonochromeFilter 5 6+ (UIImage *)doFilter:(UIImage *)image 7{ 8 // CGImageからIplImageを作成 9 IplImage *srcImage = [OpenCVUtil IplImageFromUIImage:image]; 10 IplImage *grayScaleImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); 11 IplImage *dstImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); 12 IplImage *bin_image = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); //cv::Mat aaa; 13 CvSeq *contours; 14 std::vector< cv::Point > approx; 15 CvMemStorage *storage = cvCreateMemStorage (0); 16 // グレースケール画像に変換 17 cvCvtColor(srcImage, grayScaleImage, CV_BGR2GRAY); 18 19 //2値化 20 cvThreshold(grayScaleImage,bin_image,160,255,CV_THRESH_BINARY); 21 //std::vector< std::vector< cv::Point > > contours; 22 // cv::Mat(aaa) = bin_image; 23 24 //輪郭検出 25 cvFindContours (bin_image, storage, &contours, sizeof (CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE); 26 27 28 for ( int i = 0; i < contours->total; i++){ 29 CvPoint *point = CV_GET_SEQ_ELEM (CvPoint, contours, i); 30 } 31 double Area = fabs(cvContourArea(contours, CV_WHOLE_SEQ)); 32 cv::approxPolyDP(contours, approx, 50.0, true); 33 // CGImage用にBGRに変換 34 cvCvtColor(grayScaleImage, dstImage, CV_GRAY2BGR); 35 36 // IplImageからCGImageを作成 37 UIImage *effectedImage = [OpenCVUtil UIImageFromIplImage:dstImage]; 38 39 cvReleaseImage(&srcImage); 40 cvReleaseImage(&grayScaleImage); 41 cvReleaseImage(&dstImage); 42 43 return effectedImage; 44} 45 46@end

###補足情報(言語/FW/ツール等のバージョンなど)
opencv2.4.9
xcode7.3

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

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

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

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

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

fuzzball

2017/01/05 06:17

Objective-Cのコードは ```objectivec です。
guest

回答2

0

勘で書きます。全くテストしてないです。
質問コード内の残骸を利用しています。

cpp

1std::vector<cv::Point> points; 2for (int i = 0; i < contours->total; i++) { 3 CvPoint *point = CV_GET_SEQ_ELEM(CvPoint, contours, i); 4 points.push_back(cv::Point(*point)); 5} 6cv::approxPolyDP(cv::Mat(points), approx, 50.0, true);

あ、もしかして一個ずつかな?

cpp

1for (int i = 0; i < contours->total; i++) { 2 CvPoint *point = CV_GET_SEQ_ELEM(CvPoint, contours, i); 3 cv::approxPolyDP(cv::Mat(cv::Point(*point)), approx, 50.0, true); 4}

何をしているのか全く分かってないのですみません。

投稿2017/01/05 07:06

編集2017/01/05 07:19
fuzzball

総合スコア16731

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

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

sakittyo

2017/01/11 04:20

ビルドだけなら通るのですが実際に動かすとCvPoint *point = CV_GET_SEQ_ELEM(CvPoint, contours, i);で止まってしまいました
guest

0

こんにちは。

ここに正に参考になりそうなサンプルがありました。
でも、こちらはOpenCVのC++ I/Fを使っているようです。
sakittyoさんのソースはC言語I/Fを使っているようですので、このサンプルは使えないですね。

軽く探す限りでは、cv::approxPolyDPのサンプルはC++ I/Fのものしか見つかりませんでしたが、よく探せばC言語I/Fのサンプルもあるかも知れません。
それをみつける、もしくは、sakittyoさんのソースを全面的にC++ I/Fに書き換えるかのどちらと思います。
私自身はC++ I/Fを使ったことはないので書き換え方は分かりませんが、メリットは結構あるようです。

投稿2017/01/05 04:34

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問