小编Kha*_*war的帖子

在android中使用opencv进行图像旋转会切断图像的边缘

可能重复:
使用cv :: warpAffine偏移目标图像来旋转cv :: Mat

下面的代码可以成功旋转图像,但它会切断图像的角落,并且它会以错误的方向旋转!

Mat cvImage = Highgui.imread("mnt/sdcard/canvasgrid.png");
int degrees = 20;
Point center = new Point(cvImage.cols()/2, cvImage.rows()/2);
Mat rotImage = Imgproc.getRotationMatrix2D(center, degrees, 1.0);
Mat dummy = cvWaterImage;
Imgproc.warpAffine(cvImage, dummy, rotImage, cvImage.size());
rotatedImage = dummy;

Highgui.imwrite("mnt/sdcard/imageRotate.png",rotatedImage);
Run Code Online (Sandbox Code Playgroud)

原始图像

旋转图像

PLUS旋转图像的背景是黑色的,但我希望它是透明的.

我做错了什么?谢谢

编辑已解决

首先获得旋转图像的新宽度/高度

double radians = Math.toRadians(rotationAngle);
double sin = Math.abs(Math.sin(radians));
double cos = Math.abs(Math.cos(radians));

int newWidth = (int) (scaledImage.width() * cos + scaledImage.height() * sin);
int newHeight = (int) (scaledImage.width() * sin + scaledImage.height() * cos);

int[] …
Run Code Online (Sandbox Code Playgroud)

android opencv image rotation

8
推荐指数
1
解决办法
8468
查看次数

围绕其中心旋转imageview而不切断其边缘

我已经定制了imageview,但它只是旋转它的位图而不是整个视图.我不想使用动画,因为我也拖动了imageview,所以移动动画imageivew结果很奇怪,所以坚持onDraw/draw,加上压倒画也没什么特别的.

        @Override
        protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        canvas.save();
        canvas.rotate(rotationAngle, rotationW, rotationH);
        super.onDraw(canvas);
        canvas.restore();
        }    
Run Code Online (Sandbox Code Playgroud)

我怎样才能旋转整个视图而不仅仅是它的位图?

android rotation imageview

5
推荐指数
1
解决办法
2874
查看次数

添加水印小图像到大图像opencv4android

我一直在尝试将图像添加到所需位置的大图像.我找到了一种通过addWeighted(src,alpha,water, - ,dst, - )在opencv中添加水印的方法,但问题是水印和表面图像应该是我不想要的相同尺寸.

发现另一种方式(我猜)

Mat srcMat = cvCanvasImage.submat(top/2, (top + height)/2, left/2, (left + width)/2);
Imgproc.cvtColor(mat, srcMat, Imgproc.COLOR_GRAY2BGR,4);
Run Code Online (Sandbox Code Playgroud)

但我不明白怎么做?

谢谢..

UPDATE

     Mat cvCanvasImage = Highgui.imread(Environment.getExternalStorageDirectory() + "/wallpapers/castle.jpg");

 // Small watermark image
Mat cvWaterImage = Highgui.imread(Environment.getExternalStorageDirectory() +"/square.png");

Size canvasSize = cvWaterImage.size();

   int rows = (int) canvasSize.height;
   int cols = (int) canvasSize.width;       
   int left = 0;
   int top = 0;         
   int width = rows;
   int height = cols;

   Rect ROI = new Rect(left, top, width, height);
   Core.addWeighted(cvCanvasImage.submat(ROI), alpha, cvWaterImage, beta, …
Run Code Online (Sandbox Code Playgroud)

android opencv watermark image image-processing

5
推荐指数
1
解决办法
4645
查看次数