Android 使用OpenCV旋转IplImage创建扭曲图像
我在尝试从android设备到RTMP的实时流时遇到了困难。首先,它是流好,但是,它是倾斜的,所以有一个代码来旋转图像Android 使用OpenCV旋转IplImage创建扭曲图像,android,ffmpeg,javacv,iplimage,Android,Ffmpeg,Javacv,Iplimage,我在尝试从android设备到RTMP的实时流时遇到了困难。首先,它是流好,但是,它是倾斜的,所以有一个代码来旋转图像 public IplImage rotateImage(IplImage img) { IplImage img_rotate = IplImage.create(img.height(), img.width(), img.depth(), img.nChannels()); //acctually, I d
public IplImage rotateImage(IplImage img) {
IplImage img_rotate = IplImage.create(img.height(), img.width(),
img.depth(), img.nChannels());
//acctually, I don't know how to use these two methods properly
cvTranspose(img, img_rotate);
cvFlip(img_rotate, img_rotate, 1); //?????90?
return img_rotate;
}
我在其中调用rotate from onPreviewFrame()的代码:
因此,我得到下图
在另一篇文章中,我知道我们必须使用
rgbimage = IplImage.create(imageWidth, imageHeight, IPL_DEPTH_8U, 3);
opencv_imgproc.cvCvtColor(yuvimage, rgbimage, opencv_imgproc.CV_YUV2BGR_NV21);
然后我们可以轮换,但每当我使用它时,有时会出现异常BufferOverflow,有时会出现RuntimeException我建议升级到OpenCV2.0或3.0,因为大多数cvXXX函数只是将IplImage*结构转换为Mat对象(没有深度副本)。您正在使用的api是旧的。@Rahul..我不知道如何实现新的jar,因为类现在已经更改了。你能给我提供开始的代码吗?你应该使用cvTranspose()或cv::transpose(),因为它更有效。同样,我建议升级到OpenCV2.0,因为大多数cvXXX函数只是将IplImage*结构转换为Mat对象(没有深度副本)。如果将图像存储在Mat对象中,Mat.t()将返回转置。任何旋转:应该通过在变换矩阵的一般框架中定义旋转矩阵来使用CVWAPPRAFFE。使用2.0/3.0,您可以使用warpAffine进行上述操作。你能给我CVTransposeSeit的代码吗?我在上面的评论中提到的链接中有吗
rgbimage = IplImage.create(imageWidth, imageHeight, IPL_DEPTH_8U, 3);
opencv_imgproc.cvCvtColor(yuvimage, rgbimage, opencv_imgproc.CV_YUV2BGR_NV21);