我在做Android应用程序,它可以使透视变换的图像。 我想要做同样的事情,像下面code。
我试过,但我不能看C $ C $℃。请告诉我!
谢谢
川昭一
样品code(我想要做的)
的#include< cv.h>
#包括< highgui.h>
INT
主(INT ARGC,字符** argv的)
{
IplImage结构* src_img = 0,* dst_img = 0;
*与CvMat map_matrix;
CvPoint2D32f src_pnt [4],dst_pnt [4];
如果(的argc&GT = 2)
src_img = cvLoadImage(的argv [1],CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
如果(src_img == 0)
返回-1;
dst_img = cvCloneImage(src_img);
src_pnt [0] = cvPoint2D32f(150.0,150.0);
src_pnt [1] = cvPoint2D32f(150.0,300.0);
src_pnt [2] = cvPoint2D32f(350.0,300.0);
src_pnt [3] = cvPoint2D32f(350.0,150.0);
dst_pnt [0] = cvPoint2D32f(200.0,200.0);
dst_pnt [1] = cvPoint2D32f(150.0,300.0);
dst_pnt [2] = cvPoint2D32f(350.0,300.0);
dst_pnt [3] = cvPoint2D32f(300.0,200.0);
map_matrix = cvCreateMat(3,3,CV_32FC1);
cvGetPerspectiveTransform(src_pnt,dst_pnt,map_matrix);
cvWarpPerspective(src_img,dst_img,map_matrix,CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS,cvScalarAll(100));
cvNamedWindow(src用户,CV_WINDOW_AUTOSIZE);
cvNamedWindow(DST,CV_WINDOW_AUTOSIZE);
cvShowImage(src用户,src_img);
cvShowImage(DST,dst_img);
cvWaitKey(0);
cvDestroyWindow(SRC);
cvDestroyWindow(DST);
cvReleaseImage(安培; src_img);
cvReleaseImage(安培; dst_img);
cvReleaseMat(安培; map_matrix);
返回1;
}
我的code
@覆盖
公共无效的onCreate(包savedInstanceState){
Log.i(TAG的onCreate);
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
的setContentView(R.layout.main);
资源R = getResources();
位图inputBitmap = BitmapFactory.de codeResource(R,R.drawable.icon);
垫inputMat = Utils.bitmapToMat(inputBitmap);
垫outputMat = inputMat.clone();
名单<点> src_pnt =新的ArrayList<点>();
点P0 =新的点(75.0,75.0);
src_pnt.add(P0);
点P1 =新的点(75.0,100.0);
src_pnt.add(p1)为;
点P2 =新的点(100.0,100.0);
src_pnt.add(P2);
点P3 =新的点(100.0,75.0);
src_pnt.add(P3);
垫startM = Converters.vector_Point2f_to_Mat(src_pnt);
名单<点> dst_pnt =新的ArrayList<点>();
点P4 =新的点(75.0,75.0);
dst_pnt.add(P4);
点P5 =新的点(75.0,100.0);
dst_pnt.add(P5);
点P6 =新的点(100.0,100.0);
dst_pnt.add(P6);
点P7 =新的点(100.0,75.0);
dst_pnt.add(P7);
垫ENDM = Converters.vector_Point2f_to_Mat(dst_pnt);
板M =新垫(3,3,CvType.CV_32F);
Core.perspectiveTransform(startM,ENDM,男);
尺寸尺寸=新的尺寸(200.0,200.0);
标量标量=新的标量(50.0);
Imgproc.warpPerspective(inputMat,outputMat,男,大小,Imgproc.INTER_LINEAR + Imgproc.CV_WARP_FILL_OUTLIERS,Imgproc.BORDER_DEFAULT,标量);
位图outputBitmap = inputBitmap;
Utils.matToBitmap(outputMat,outputBitmap);
ImageView的imageView1 =(ImageView的)findViewById(R.id.imageView1);
imageView1.setImageBitmap(outputBitmap);
}
解决方案
也有类似的问题,这一点,但找到了解决办法。请参见此处工作的例子。
I am making Android App which can make Perspective Transform Image. I want to do same thing like below code.
I tried but I cant read C code. Please advise me!
Thanks,
Shoichi
Sample Code(I want to do)
#include <cv.h>
#include <highgui.h>
int
main (int argc, char **argv)
{
IplImage *src_img = 0, *dst_img = 0;
CvMat *map_matrix;
CvPoint2D32f src_pnt[4], dst_pnt[4];
if (argc >= 2)
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_img == 0)
return -1;
dst_img = cvCloneImage (src_img);
src_pnt[0] = cvPoint2D32f (150.0, 150.0);
src_pnt[1] = cvPoint2D32f (150.0, 300.0);
src_pnt[2] = cvPoint2D32f (350.0, 300.0);
src_pnt[3] = cvPoint2D32f (350.0, 150.0);
dst_pnt[0] = cvPoint2D32f (200.0, 200.0);
dst_pnt[1] = cvPoint2D32f (150.0, 300.0);
dst_pnt[2] = cvPoint2D32f (350.0, 300.0);
dst_pnt[3] = cvPoint2D32f (300.0, 200.0);
map_matrix = cvCreateMat (3, 3, CV_32FC1);
cvGetPerspectiveTransform (src_pnt, dst_pnt, map_matrix);
cvWarpPerspective (src_img, dst_img, map_matrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll (100));
cvNamedWindow ("src", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("dst", CV_WINDOW_AUTOSIZE);
cvShowImage ("src", src_img);
cvShowImage ("dst", dst_img);
cvWaitKey (0);
cvDestroyWindow ("src");
cvDestroyWindow ("dst");
cvReleaseImage (&src_img);
cvReleaseImage (&dst_img);
cvReleaseMat (&map_matrix);
return 1;
}
My Code
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Resources r = getResources();
Bitmap inputBitmap = BitmapFactory.decodeResource(r, R.drawable.icon);
Mat inputMat = Utils.bitmapToMat(inputBitmap);
Mat outputMat = inputMat.clone();
List<Point> src_pnt = new ArrayList<Point>();
Point p0 = new Point(75.0, 75.0);
src_pnt.add(p0);
Point p1 = new Point(75.0, 100.0);
src_pnt.add(p1);
Point p2 = new Point(100.0, 100.0);
src_pnt.add(p2);
Point p3 = new Point(100.0, 75.0);
src_pnt.add(p3);
Mat startM = Converters.vector_Point2f_to_Mat(src_pnt);
List<Point> dst_pnt = new ArrayList<Point>();
Point p4 = new Point(75.0, 75.0);
dst_pnt.add(p4);
Point p5 = new Point(75.0, 100.0);
dst_pnt.add(p5);
Point p6 = new Point(100.0, 100.0);
dst_pnt.add(p6);
Point p7 = new Point(100.0, 75.0);
dst_pnt.add(p7);
Mat endM = Converters.vector_Point2f_to_Mat(dst_pnt);
Mat M = new Mat(3, 3, CvType.CV_32F);
Core.perspectiveTransform(startM, endM, M);
Size size = new Size(200.0, 200.0);
Scalar scalar = new Scalar(50.0);
Imgproc.warpPerspective(inputMat, outputMat, M, size, Imgproc.INTER_LINEAR + Imgproc.CV_WARP_FILL_OUTLIERS, Imgproc.BORDER_DEFAULT, scalar);
Bitmap outputBitmap = inputBitmap;
Utils.matToBitmap(outputMat, outputBitmap);
ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView1.setImageBitmap(outputBitmap);
}
解决方案
Had a similar problem with this, but found a solution. See here for a working example.