- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在研究图像变形。变换后的图像实坐标为x和y,变换后图像的极坐标为r和theta。
(圆柱变形)。我有转换功能。但我对某些事情感到困惑。我从可以轻松转换为笛卡尔坐标的转换函数中获取极坐标。但是如何绘制这个变换后的图像呢?因为新尺寸将不同于旧图像尺寸。
编辑 :我有圆柱体中显示的图像。如图所示,我具有将其转换为幻觉图像的转换功能。由于此图像的大小与原始图像不同,我如何确保主图像中的所有点都被转换。此外,变换图像中那些点的坐标是极坐标的。我可以使用 openCV 使用转换后的极坐标形成新图像吗?
最佳答案
这里有两个问题。在我的理解中,更大的问题出现了,因为你正在将离散积分坐标转换为浮点坐标。另一个问题是生成的图像大小大于或小于原始图像的大小。此外,生成的图像不必是矩形的,因此必须对其进行裁剪或在角处填充黑色像素。
根据 http://opencv.willowgarage.com/documentation/geometric_image_transformations.html没有径向变换例程。
I'd suggest you do the following:
- Upscale the original image to have width*2, height*2. Set the new image to black. (cvResize, cvZero)
- Run over each pixel in the original image. Find the new coordinates of the pixel. Add 1/9 of its value to all 8 neighbors of the new coordinates, and to the new coordinates itself. (CV_IMAGE_ELEM(...) += 1.0/9 * ....)
- Downscale the new image back to the original width, height.
- Depending on the result, you may want to use a sharpening routine.
如果您想保留一些超出范围的像素,那是另一个问题。基本上你想找到你收到的坐标的最小值和最大值,所以例如你的原始图像有 Min,Max = [0,1024] 和你的新 MinNew,MaxNew = [-200,1200] 你做一个函数
normalize(int &convertedx,int &convertedy)
{
convertedx = MinNewX + (MaxNewX-MinNewX)/(MaxX-MinX) * convertedx;
convertedy = ...;
}
关于c++ - 使用极坐标创建图像(图像变换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404013/
我正在寻找绘制极坐标数据的替代方法。我需要实现像 this 这样的图表具有动态选项,例如 this . 非常感谢您的帮助! 最佳答案 我个人需要这些: Highcharts JS canvasXpre
我是一名优秀的程序员,十分优秀!