- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
背景:
该应用程序允许用户上传自己的照片,然后将一副眼镜戴在脸上,看看照片是什么样子。在大多数情况下,它工作正常。用户选择 2 个瞳孔的位置后,我根据瞳孔距离与眼镜中心点之间已知距离的比率自动缩放图像。那里一切正常,但现在我需要自动将眼镜图像放在眼睛上。
我正在使用 KinectJS,但问题不在于该库或 javascript..它更多的是算法要求
我必须使用什么:
一些代码:
//.. code before here just zooms the image, etc..
//problem is here (this is wrong, but I need to know what is the right way to calculate this)
var newLeftEyeX = self.leftEyePosition.x * ratio;
var newLeftEyeY = self.leftEyePosition.y * ratio;
//create a blue dot for testing (remove later)
var newEyePosition = new Kinetic.Circle({
radius: 3,
fill: "blue",
stroke: "blue",
strokeWidth: 0,
x: newLeftEyeX,
y: newLeftEyeY
});
self.pointsLayer.add(newEyePosition);
var glassesWidth = glassesImage.getWidth();
var glassesHeight = glassesImage.getHeight();
// this code below works perfect, as I can see the glasses center over the blue dot created above
newGlassesPosition.x = newLeftEyeX - (glassesWidth / 4);
newGlassesPosition.y = newLeftEyeY - (glassesHeight / 2);
需要
一个数学天才给我一个算法来确定在调整图像大小后新的左眼位置应该在哪里
更新
在过去 6 个小时左右的研究之后,我认为我需要进行某种“翻译转换”,但我看到的示例只允许按 x 和 y 数量设置它。而我只知道底层图像的比例。这是我找到的示例(对我没有帮助):
http://tutorials.jenkov.com/html5-canvas/transformation.html
这里有一些看起来很有趣的东西,但它是为 Silverlight 设计的:
Get element position after transform
是否有某种方法可以在 Html5 和/或 KinectJS 中做同样的事情?或者也许我在这里走错了路……有什么想法吗?
更新 2
我试过这个:
// if zoomFactor > 1, then picture got bigger, so...
if (zoomFactor > 1) {
// if x = 10 (for example) and if zoomFactor = 2, that means new x should be 5
// current x / zoomFactor => 10 / 2 = 5
newLeftEyeX = self.leftEyePosition.x / zoomFactor;
// same for y
newLeftEyeY = self.leftEyePosition.y / zoomFactor;
}
else {
// else picture got smaller, so...
// if x = 10 (for example) and if zoomFactor = 0.5, that means new x should be 20
// current x * (1 / zoomFactor) => 10 * (1 / 0.5) = 10 * 2 = 20
newLeftEyeX = self.leftEyePosition.x * (1 / zoomFactor);
// same for y
newLeftEyeY = self.leftEyePosition.y * (1 / zoomFactor);
}
那没有用,所以我尝试了 Rody Oldenhuis 的建议(感谢 Rody)的实现:
var xFromCenter = self.leftEyePosition.x - self.xCenter;
var yFromCenter = self.leftEyePosition.y - self.yCenter;
var angle = Math.atan2(yFromCenter, xFromCenter);
var length = Math.hypotenuse(xFromCenter, yFromCenter);
var xNew = zoomFactor * length * Math.cos(angle);
var yNew = zoomFactor * length * Math.sin(angle);
newLeftEyeX = xNew + self.xCenter;
newLeftEyeY = yNew + self.yCenter;
但是,这仍然没有按预期工作。所以,我不确定目前的问题是什么。如果有人以前使用过 KinectJS 并且知道可能是什么问题,请告诉我。
更新 3
我在纸上检查了罗迪的计算,它们看起来不错,所以显然这里有其他东西搞砸了。我得到了缩放因子 1 和 2 时左瞳孔的坐标。有了这些坐标,也许有人可以算出问题是什么:
缩放系数 1:x = 239,y = 209
缩放因子 2:x = 201,y = 133
最佳答案
OK,既然是算法题,我就保留这个泛型,只写伪代码。
如果我没理解错的话,你想要的是以下内容:
转换所有坐标,使坐标系的原点位于缩放中心(通常为中心像素)
计算从这个新原点到感兴趣点绘制的线与正 x 轴所成的 Angular 。还要计算这条线的长度。
缩放后新的 x 和 y 坐标是通过延长这条线来定义的,这样新线就是缩放因子乘以原始线的长度。
将新找到的 x 和 y 坐标转换回对计算机有意义的坐标系(例如,左上角像素 = 0,0)
重复所有兴趣点。
在伪代码中(带公式):
x_center = image_width/2
y_center = image_height/2
x_from_zoom_center = x_from_topleft - x_center
y_from_zoom_center = y_from_topleft - y_center
angle = atan2(y_from_zoom_center, x_from_zoom_center)
length = hypot(x_from_zoom_center, y_from_zoom_center)
x_new = zoom_factor * length * cos(angle)
y_new = zoom_factor * length * sin(angle)
x_new_topleft = x_new + x_center
y_new_topleft = y_new + y_center
请注意,这假设用于长度和宽度的像素数在缩放后保持不变。另请注意,应该进行一些舍入(保持所有 double ,并且仅在所有计算之后舍入到 int )
在上面的代码中,atan2
是四象限反正切,在大多数编程语言中都可用,hypot
就是 sqrt(x*x + y *y)
,但随后会更仔细地计算(例如,避免溢出等),在大多数编程语言中也可用。
这真的是你想要的吗?
关于javascript - KinectJS : Algorithm required to determine new X, 图像调整大小后的 Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894567/
我正在尝试学习 Knockout 并尝试创建一个照片 uploader 。我已成功将一些图像存储在数组中。现在我想回帖。在我的 knockout 码(Javascript)中,我这样做: 我在 Jav
我正在使用 php 编写脚本。我的典型问题是如何在 mysql 中添加一个有很多替代文本和图像的问题。想象一下有机化学中具有苯结构的描述。 最有效的方法是什么?据我所知,如果我有一个图像,我可以在数据
我在两个图像之间有一个按钮,我想将按钮居中到图像高度。有人可以帮帮我吗? Entrar
下面的代码示例可以在这里查看 - http://dev.touch-akl.com/celebtrations/ 我一直在尝试做的是在 Canvas 上绘制 2 个图像(发光,然后耀斑。这些图像的链接
请检查此https://jsfiddle.net/rhbwpn19/4/ 图像预览对于第一篇帖子工作正常,但对于其他帖子则不然。 我应该在这里改变什么? function readURL(input)
我对 Canvas 有疑问。我可以用单个图像绘制 Canvas ,但我不能用单独的图像绘制每个 Canvas 。- 如果数据只有一个图像,它工作正常,但数据有多个图像,它不工作你能帮帮我吗? va
我的问题很简单。如何获取 UIImage 的扩展类型?我只能将图像作为 UIImage 而不是它的名称。图像可以是静态的,也可以从手机图库甚至文件路径中获取。如果有人可以为此提供一点帮助,将不胜感激。
我有一个包含 67 个独立路径的 SVG 图像。 是否有任何库/教程可以为每个路径创建单独的光栅图像(例如 PNG),并可能根据路径 ID 命名它们? 最佳答案 谢谢大家。我最终使用了两个答案的组合。
我想将鼠标悬停在一张图片(音乐专辑)上,然后播放一张唱片,所以我希望它向右移动并旋转一点,当它悬停时我希望它恢复正常动画片。它已经可以向右移动,但我无法让它随之旋转。我喜欢让它尽可能简单,因为我不是编
Retina iOS 设备不显示@2X 图像,它显示 1X 图像。 我正在使用 Xcode 4.2.1 Build 4D502,该应用程序的目标是 iOS 5。 我创建了一个测试应用(主/细节)并添加
我正在尝试从头开始以 Angular 实现图像 slider ,并尝试复制 w3school基于图像 slider 。 下面我尝试用 Angular 实现,谁能指导我如何使用 Angular 实现?
我正在尝试获取图像的图像数据,其中 w= 图像宽度,h = 图像高度 for (int i = x; i imageData[pos]>0) //Taking data (here is the pr
我的网页最初通过在 javascript 中动态创建图像填充了大约 1000 个缩略图。由于权限问题,我迁移到 suPHP。现在不用标准 标签本身 我正在通过这个 php 脚本进行检索 $file
我正在尝试将 python opencv 图像转换为 QPixmap。 我按照指示显示Page Link我的代码附在下面 img = cv2.imread('test.png')[:,:,::1]/2
我试图在这个 Repository 中找出语义分割数据集的 NYU-v2 . 我很难理解图像标签是如何存储的。 例如,给定以下图像: 对应的标签图片为: 现在,如果我在 OpenCV 中打开标签图像,
import java.util.Random; class svg{ public static void main(String[] args){ String f="\"
我有一张 8x8 的图片。 (位图 - 可以更改) 我想做的是能够绘制一个形状,给定一个 Path 和 Paint 对象到我的 SurfaceView 上。 目前我所能做的就是用纯色填充形状。我怎样才
要在页面上显示图像,你需要使用源属性(src)。src 指 source 。源属性的值是图像的 URL 地址。 定义图像的语法是: 在浏览器无法载入图像时,替换文本属性告诉读者她们失去的信息。此
**MMEditing是基于PyTorch的图像&视频编辑开源工具箱,支持图像和视频超分辨率(super-resolution)、图像修复(inpainting)、图像抠图(matting)、
我正在尝试通过资源文件将图像插入到我的程序中,如下所示: green.png other files 当我尝试使用 QImage 或 QPixm
我是一名优秀的程序员,十分优秀!