我有一个16x16透明的png而且我做了
convert -rotate -45 a.png b.png
Run Code Online (Sandbox Code Playgroud)
这将它旋转并创建一个大小为22x22的新图像b.png,当我在背景中使用时,显示原始图像(16x16)与底层背景一起旋转但是出现的新填充显示为白色背景.
如何使新填充物透明化?
如果那是不可能的,那么我怎么能让新图像的所有背景都是一种颜色?
我听说应该可以对jpeg图像进行无损旋转.这意味着您在没有IDCT的情况下在频域中进行旋转.我试过谷歌但没找到任何东西.有人能为此带来一些启示吗?
我无意义的意思是我不会在轮换中丢失任何其他信息.当然,这可能只有在旋转90度的倍数时才有可能.
我有一个问题,当我用我的平板电脑拍照时,我使用opencv来检测脸部并识别脸部.因此,我将尝试旋转面部,以便例如将眼睛和眼睛置于相同的位置,例如具有相同的水平角度.
你能给我一些OpenCv函数或一些有用的链接吗?
提前致谢.
马尔科
我有两个带有一定旋转角度的棋盘.让我们参考第一张图像找到第二张图像的旋转角度.
为此,我找到了这些对象的旋转矩阵(3x3)和平移矩阵(3x1).
如何使用这些矩阵找到对象的旋转角度和旋转轴?
在标记重复或关闭之前,请仔细阅读整个问题
我想围绕其基点的中心点旋转图像(特别是箭头图像).
例如,在开始时,我的图像将像9中的时钟中的秒针.并且假设如果我将该图像旋转30度,它应该看起来像时钟秒针10和120度时钟秒针1.
所以我想围绕它的基座中心(沿x轴)旋转那个图像.
那么如果我第一次编码,我应该作为枢轴(X和Y)传递什么
imageView.setPivotX(1f);
imageView.setPivotY(1f);
imageView.setRotation(-30);
Run Code Online (Sandbox Code Playgroud)
或第二个代码
Matrix matrix = new Matrix();
imageView.setScaleType(ScaleType.MATRIX);
matrix.postRotate((float) 20, 0f, 0f);
imageView.setImageMatrix(matrix);
Run Code Online (Sandbox Code Playgroud)
或第三代码
Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.arrow_0_degree);
Matrix matrix = new Matrix();
matrix.postRotate(30);
Bitmap rotated = Bitmap.createBitmap(myImg, 0, 1, myImg.getWidth(), myImg.getHeight(), matrix, true);
imageView.setImageBitmap(rotated);
Run Code Online (Sandbox Code Playgroud)
或第四个代码
final RotateAnimation rotateAnim = new RotateAnimation(0.0f, degree,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotateAnim.setDuration(0);
rotateAnim.setFillAfter(true);
imgview.startAnimation(rotateAnim);
Run Code Online (Sandbox Code Playgroud)
添加了一个图像,以便更好地理解沿顺时针方向旋转90度.
我希望将来google会添加更多关于支点的文档.
提前致谢.
假设我有一个图像I,我旋转-45°使用imrotate(我得到I_R).然后我绘制两条线AB和CD(平行线).最后,我将两条线向后旋转(45°)并在原始图像中绘制它们I.
我I使用MATLAB函数旋转imrotate():
I_R = imrotate(I,-45);
Run Code Online (Sandbox Code Playgroud)
从Matlab帮助中,我得到:B = imrotate(A,angle)围绕其中心点以逆时针方向旋转图像A角度.
但似乎
imrotate为图像添加了翻译!我已经阅读了内置matlab函数的代码,似乎它使用一个函数调用getOutputBound来检查旋转的图像是否适合图中.这个翻译就是我要找的!!
这四个点A,B,C,D形成的两条平行线AB及CD.
A = [x_A; u];
B = [x_B; u];
C = [x_A; d];
D = [x_B; d];
Run Code Online (Sandbox Code Playgroud)
所以现在,我旋转两行,我使用我的函数rotateTwoPoints(),只需调用以下两行:
[Af,Bf] = rotateTwoPoints(A,B,-45,O,true);
[Cf,Df] = rotateTwoPoints(C,D,-45,O,true);
Run Code Online (Sandbox Code Playgroud)
旋转O所在的原点在哪里.
O = [0;0]我的意思是它是情节的起源.没有成功!我正在尝试使用旋转图像
void rotate(cv::Mat& src, double angle, cv::Mat& dst)
{
int len = std::max(src.cols, src.rows);
cv::Point2f pt(len / 2., len / 2.);
cv::Mat r = cv::getRotationMatrix2D(pt, angle, 1.0);
cv::warpAffine(src, dst, r, cv::Size(src.cols, src.rows));
}
Run Code Online (Sandbox Code Playgroud)
通过给出角度,源和目标图像.旋转工作正常如下.
我想让黑色区域变白.我试过了
cv::Mat dst = cv::Mat::ones(src.cols, src.rows, src.type());
Run Code Online (Sandbox Code Playgroud)
在调用rotate之前,但结果没有变化.我怎样才能做到这一点?
注意:我正在寻找在进行旋转时实现此目的的解决方案.显然,通过在旋转后使黑色区域变白可以实现.
在FireMonkey中,将位图绘制到源矩形很简单:
Canvas.DrawBitmap(FBitmap, ImageSrcRect, ImageDstRect, 1);
Run Code Online (Sandbox Code Playgroud)
而我正在TPaintBox画布上做这件事.我想改为绘制旋转的位图(并缩放,因为目标大小可能与源大小不同.)
特别:
如下图所示:
左边一个是我目前可以做的; 在右边是我想做的.
最好的方法是什么?
为了保持现有代码简单(例如,绘制到目标矩形,从而缩放结果),我一直在尝试在调用现有的DrawBitmap代码之前向画布的矩阵添加旋转矩阵.例如,
OldMatrix := Canvas.Matrix; // Original, to restore
W := PointB.X - PointA.X;
H := PointA.Y - PointB.Y;
RotationMatrix := TMatrix.CreateRotation(-ArcTan2(H, W));
Canvas.SetMatrix(OldMatrix * RotationMatrix);
Canvas.DrawBitmap(FImage, ImageSrcRect, ImageDstRect, 1);
Canvas.SetMatrix(OldMatrix);
Run Code Online (Sandbox Code Playgroud)
并且有几个变化与现有矩阵相乘,创建了一个全新的矩阵,包括平移和旋转等等.所有这些部分都有效:旋转角度是正确的,但我在使位置保持一致方面遇到了很多麻烦 - 例如,围绕中心点旋转(这甚至不是围绕点旋转位图的顶部,而不是围绕中心旋转.)我发现旋转的图像在底部偏移很好右边象限,但在其他三个中偏移/平移不正确,例如偏得太远,或者剪裁到两点的最左边或最顶端的X或Y位置.我不知道为什么会这样,而且就此而言,我正在寻求帮助.
TPaintBox任意放置的画布.油漆盒本身可以在上面TScaledLayout.我正在进行一个项目,以自动旋转流体实验的显微镜图像堆栈,以便它们与微流控芯片的CAD模板图像对齐。我正在使用Python中的OpenCV软件包进行图像处理。必须具有正确的旋转方向,以便可以正确遮盖图像以进行分析。我们的芯片具有在每个帧中都可见的充满荧光染料的标记。模板和示例图像如下所示(模板可以缩放到任意大小,但是图像的相关区域通常约为100x100像素左右):
我无法将图像旋转对齐到CAD模板。通常,CAD模板与图像之间的未对准小于几度,这仍然足以干扰分析,因此即使它相对较小,我也需要能够测量旋转差异。
在线以下示例我正在使用以下过程:
这是我的代码示例(部分从此处借来):
import numpy as np
import cv2
import matplotlib.pyplot as plt
MAX_FEATURES = 500
GOOD_MATCH_PERCENT = 0.5
def alignImages(im1, im2,returnpoints=False):
# Detect ORB features and compute descriptors.
size1 = int(0.1*(np.mean(np.shape(im1))))
size2 = int(0.1*(np.mean(np.shape(im2))))
orb1 = cv2.ORB_create(MAX_FEATURES,edgeThreshold=size1,patchSize=size1)
orb2 = cv2.ORB_create(MAX_FEATURES,edgeThreshold=size2,patchSize=size2)
keypoints1, descriptors1 = orb1.detectAndCompute(im1, None)
keypoints2, descriptors2 = orb2.detectAndCompute(im2, None)
matcher = cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)
matches = matcher.match(descriptors1,descriptors2)
# Sort matches by score
matches.sort(key=lambda x: x.distance, reverse=False)
# Remove not …Run Code Online (Sandbox Code Playgroud) python opencv image-processing image-rotation feature-detection
image-rotation ×10
rotation ×6
opencv ×4
android ×1
animate.css ×1
c++ ×1
css3 ×1
delphi ×1
firemonkey ×1
image ×1
imagemagick ×1
jpeg ×1
matlab ×1
matrix ×1
opengl ×1
png ×1
python ×1
transform ×1
translation ×1
transparency ×1