旋转IplImage使用OpenCV创建扭曲的图像

时间:2015-11-05 05:25:55

标签: 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 don't know how to use these two methods properly
        cvTranspose(img, img_rotate);
        cvFlip(img_rotate, img_rotate, 1);   //?????90?

        return img_rotate;
    }

我的代码,我从onPreviewFrame()调用rotate:

    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {

        if (yuvIplimage != null && recording) {
         videoTimestamp = 1000 * (System.currentTimeMillis() - startTime);

         // Put the camera preview frame right into the yuvIplimage object
         yuvIplimage.getByteBuffer().put(data);
        try {

             // Get the correct time
                recorder.setTimestamp(videoTimestamp);

                // Record the image into FFmpegFrameRecorder
                recorder.record(rotateImage(yuvIplimage));

            } catch (FFmpegFrameRecorder.Exception e) {
                Log.v(LOG_TAG,e.getMessage());
                e.printStackTrace();
            }
        }
    }

因此,我得到下面的图像

Rotated Image however distorted

在其他一些帖子中,我发现我们必须使用

    rgbimage = IplImage.create(imageWidth, imageHeight, IPL_DEPTH_8U, 3);
    opencv_imgproc.cvCvtColor(yuvimage, rgbimage, opencv_imgproc.CV_YUV2BGR_NV21);

然后我们可以旋转但是当我使用它时,我有时会得到异常BufferOverflow,有时会出现RuntimeException

0 个答案:

没有答案