###前提・実現したいこと
opencvを使って四角形の辺の長さを求めたいです。
今、FindContoursを使い輪郭を検出しapproxPolyDPで直線近似しapprox.size() == 4で四角形を探索しています。approxの中に座標が入っていると思います。
しかしx,y座標両方入っていてどう取り出していいのかわかりません。
いい方法を教えてください。
###該当のソースコード
object
1#import <CoreMotion/CoreMotion.h> 2#import "MonochromeFilter.h" 3#import "OpenCVUtil.h" 4#import <AudioToolbox/AudioServices.h> 5@implementation MonochromeFilter 6 7 8+ (UIImage *)doFilter:(UIImage *)image 9{ 10 // CGImageからIplImageを作成 11 IplImage *srcImage = [OpenCVUtil IplImageFromUIImage:image]; 12 IplImage *grayScaleImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); 13 IplImage *dstImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); 14 IplImage *bin_image = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); //cv::Mat aaa; 15 CvSeq *contours; 16 std::vector< cv::Point > approx; 17 CvMemStorage *storage = cvCreateMemStorage (0); 18 // グレースケール画像に変換 19 cvCvtColor(srcImage, grayScaleImage, CV_BGR2GRAY); 20//2値化 21 cvThreshold(grayScaleImage,bin_image,10.0, 255.0, CV_THRESH_OTSU); 22//輪郭検出 23 cvFindContours (bin_image, storage, &contours, sizeof (CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE); 24 std::vector<cv::Point> points; 25 cv::Mat(aaa) = bin_image; 26if(contours != NULL){ 27 for (int i = 1; i < contours->total; i++) { 28 CvPoint *point = CV_GET_SEQ_ELEM(CvPoint, contours, i); 29 points.push_back(cv::Point(*point)); 30 cv::approxPolyDP(cv::Mat(points), approx, 100, true); 31 double area = cv::contourArea(approx); 32 double Area = fabs(cvContourArea(contours, CV_WHOLE_SEQ)); 33 cv::polylines(aaa,points, true, cv::Scalar(255, 0, 0), 2); 34 contours = contours->h_next; 35 if(contours==NULL)break; 36 if (approx.size() == 4 && area > 100.0){ 37 cv::Point p1 = approx[0]; 38 cv::Point p2 = approx[1]; 39 cv::Point p3 = approx[2]; 40 cv::Point p4 = approx[3]; 41 double zzz =area; 42 } 43 } 44 } 45 cvReleaseMemStorage (&storage); 46 47 // CGImage用にBGRに変換 48 IplImage binbin_image = aaa; 49 cvCvtColor(&binbin_image, dstImage, CV_GRAY2BGR); 50 //IplImageからCGImageを作成 51 UIImage *effectedImage = [OpenCVUtil UIImageFromIplImage:&binbin_image]; 52 cvReleaseImage(&srcImage); 53 cvReleaseImage(&grayScaleImage); 54 cvReleaseImage(&dstImage); 55 return effectedImage; 56} 57 58@end 59
###補足情報(言語/FW/ツール等のバージョンなど)
opencv2.4.9
iOS 9.3.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/13 17:51