画像を長方形にトリミングできるように、画像のコーナーポイントを見つける必要があります。すでに輪郭を見つけて、その上で approxpoly() 関数を使用しています。輪郭のコーナー座標を見つける方法は?これが私のCコードです->
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage *img,*gray;
if((img = cvLoadImage("save.jpg", 1)) == NULL)
{
printf("A Img open error\n");
}
gray=cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
cvCvtColor(img,gray,CV_BGR2GRAY);
IplImage* out_median = cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,1);
cvSmooth( gray,out_median,CV_MEDIAN,3);
IplImage* out_threshold = cvCreateImage( cvGetSize(out_median), out_median->depth, 1);
cvThreshold(out_median,out_threshold,1,255,CV_THRESH_BINARY);
CvMemStorage* storage = cvCreateMemStorage();
CvSeq* first_contour = NULL;
cvFindContours(out_threshold,storage,&first_contour,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
CvSeq* approx_polygon = NULL;
approx_polygon=cvApproxPoly(first_contour,sizeof(CvContour),storage,CV_POLY_APPROX_DP,0.01*cvArcLength(first_contour,CV_WHOLE_SEQ, 1),0);
//cvDrawContours(out_threshold,approx_polygon,cvScalarAll(255),cvScalarAll(255),100);
//cvShowImage("Contours", out_threshold );
//cvSaveImage("save_approxpoly_contour.jpg",out_threshold);
cvWaitKey(0);
return 0;
}
これは、Approxpoly() を適用した後の輪郭画像です。