- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最佳答案
这实际上很简单,您只需要应用极坐标即可。这是一个完整注释的示例(用 C++ 实现,并使用 OpenCV 仅用于数据结构和图像加载和显示):
#include <opencv2/highgui.hpp>
// Function returning the bilinear interpolation of the input image at input coordinates
cv::Vec3b interpolate(const cv::Mat &image, float x, float y)
{
// Compute bilinear interpolation weights
float floorx=std::floor(x), floory=std::floor(y);
float fracx=x-floorx, fracy=y-floory;
float w00=(1-fracy)*(1-fracx), w01=(1-fracy)*fracx, w10=fracy*(1-fracx), w11=fracy*fracx;
// Read the input image values at the 4 pixels surrounding the floating point (x,y) coordinates
cv::Vec3b val00 = image.at<cv::Vec3b>(floory, floorx);
cv::Vec3b val01 = (floorx<image.cols-1 ? image.at<cv::Vec3b>(floory, floorx+1) : image.at<cv::Vec3b>(floory, 0)); // Enable interpolation between the last right-most and left-most columns
cv::Vec3b val10 = image.at<cv::Vec3b>(floory+1, floorx);
cv::Vec3b val11 = (floorx<image.cols-1 ? image.at<cv::Vec3b>(floory+1, floorx+1) : image.at<cv::Vec3b>(floory+1, 0)); // Enable interpolation between the last right-most and left-most columns
// Compute the interpolated color
cv::Vec3b val_interp;
val_interp.val[0] = cv::saturate_cast<uchar>(val00.val[0]*w00+val01.val[0]*w01+val10.val[0]*w10+val11.val[0]*w11);
val_interp.val[1] = cv::saturate_cast<uchar>(val00.val[1]*w00+val01.val[1]*w01+val10.val[1]*w10+val11.val[1]*w11);
val_interp.val[2] = cv::saturate_cast<uchar>(val00.val[2]*w00+val01.val[2]*w01+val10.val[2]*w10+val11.val[2]*w11);
return val_interp;
}
// Main function
void main()
{
const float pi = 3.1415926535897932384626433832795;
// Load and display color panorama image
cv::Mat panorama = cv::imread("../panorama_sd.jpg", cv::IMREAD_COLOR);
cv::namedWindow("Panorama");
cv::imshow("Panorama", panorama);
// Infer the size of the final image from the dimensions of the panorama
cv::Size result_size(panorama.rows*2, panorama.rows*2);
float ctrx=result_size.width/2, ctry=result_size.height/2;
// Initialize an image with black background, with inferred dimensions and same color format as input panorama
cv::Mat tiny_earth_img = cv::Mat::zeros(result_size, panorama.type());
cv::Vec3b *pbuffer_img = tiny_earth_img.ptr<cv::Vec3b>(); // Get a pointer to the buffer of the image (sequence of 8-bit interleaved BGR values)
// Generate the TinyEarth image by looping over all its pixels
for(int y=0; y<result_size.height; ++y) {
for(int x=0; x<result_size.width; ++x, ++pbuffer_img) {
// Compute the polar coordinates associated with the current (x,y) point in the final image
float dx=x-ctrx, dy=y-ctry;
float radius = std::sqrt(dx*dx+dy*dy);
float angle = std::atan2(dy,dx)/(2*pi); // Result in [-0.5, 0.5]
angle = (angle<0 ? angle+1 : angle); // Result in [0,1[
// Map the polar coordinates to cartesian coordinates in the panorama image
float panx = panorama.cols*angle;
float pany = panorama.rows-1-radius; // We want the bottom of the panorama to be at the center
// Ignore pixels which cannot be linearly interpolated in the panorama image
if(std::floor(panx)<0 || std::floor(panx)+1>panorama.cols || std::floor(pany)<0 || std::floor(pany)+1>panorama.rows-1)
continue;
// Interpolate the panorama image at coordinates (panx, pany), and store this value in the final image
pbuffer_img[0] = interpolate(panorama, panx, pany);
}
}
// Display the final image
cv::imwrite("../tinyearth.jpg", tiny_earth_img);
cv::namedWindow("TinyEarth");
cv::imshow("TinyEarth", tiny_earth_img);
cv::waitKey();
}
float panx = panorama.cols*angle;
float pany = panorama.rows-1-radius;
float panx = panorama.cols*angle;
float pany = std::max(0.f,panorama.rows-1-radius);
float panx = panorama.cols*angle;
float pany = panorama.rows-1-0.70710678118654752440084436210485*radius;
const float scale_cst = 100;
float panx = panorama.cols*angle;
float pany = (panorama.rows-1)*(1-std::log(1+scale_cst*0.70710678118654752440084436210485*radius/panorama.rows)/std::log(1+scale_cst));
关于image-processing - 将极坐标应用于 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533441/
我有一个应用程序,它将在 SQLDatabase 中保存一组图像,然后用户将拍摄一张照片,我希望能够将它与数据库中的图像相匹配。 我不知道从哪里开始,有人可以帮忙吗?指出我正确的方向? 谢谢 最佳答案
在我的项目中,我有两个 UIViewController。在我的第一个 ViewController 上,我有一个 UIImageView,并且有一个来自 url 的图像。在第二个 ViewContr
如何从上下文创建 UIImage 以便我可以返回它?我只希望它有透明像素。我有一种不同的方法,可以将较小的 UIImage 添加到较大的 UIImage,但我需要从头开始。 + (UIImage *)
我想知道如何将 UIImage 居中到 UIButton。我正在使用 UIButton 的 setImage 方法来放置 UIImage .. 最佳答案 您可以使用 contentMode 属性: b
我从相机获取 UIimages 并将它们分配给要显示的 UIImageViews。当我这样做时,相机会给我一个 1200 x 1600 像素的图像,然后我将其分配给我的应用程序中的 UIImageVi
Swift 4 有 Codable这太棒了。但是UIImage默认情况下不符合它。我们怎么能做到这一点? 我试过 singleValueContainer和 unkeyedContainer exte
我的代码在普通设备上运行良好,但在视网膜设备上创建模糊图像。 有人知道我的问题的解决方案吗? + (UIImage *) imageWithView:(UIView *)view { UIGr
我总是得到:CGImageCreate:无效的图像大小:0 x 0。 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; // En
我有一张图片,想创建一张如下所示的黑色图片: 我有一个 View 和一个 ImageView ,因为它是 subview 。 ImageView 的 alpha 为 0.5,其色调颜色为黑色。 Vie
几天来我一直被困在一些必须非常简单的事情上,我已经搜索了几天,但我似乎无法找到正确的代码来工作。 我有两张图片,一张是背景图片,另一张会遮盖第一张图片。我可以用手势移动蒙版图像。我可以缩放、旋转和移动
我正在尝试拍摄类似背景透明的三角形图像,并根据用户偏好在三角形部分或背景部分上应用圆点图像。例如,我如何将圆点应用于三角形部分,然后将条纹应用于图像的透明部分。有针对这种事情的屏蔽技术吗? 非常感谢,
给出下面的图片,百分比为 25%。如何生成另一个代表给定图像径向部分 25% 的 UIImage?非常感谢任何帮助。 输入 输出 - (UIImage *)radialPortion:(float)p
这是我的代码: - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { // at this point the
我正在使用扩展程序对我的图像进行像素化处理,如下所示: func pixellated(scale: Int = 8) -> UIImage? { guard let ciImage = CI
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
我有两个 UIImage 实例。我怎样才能创建第三个 UIImage 这只是拼接在一起的两个原始图像?我想要第一张图片在顶部,第二张图片在底部,这样顶部图片的底部边缘与底部图像的顶部边缘齐平。 最佳答
我有一个 UIImage 和一个 CGPoint,它们告诉我应该朝哪个方向移动它以创建另一个图像。背景可以是任何东西。 提供初始 UIImage 我如何创建新的?最有效的方法是什么? 这是我正在做的:
我有一个 UIImage,显示在 UIImageView 中。我在 UIImageView 中还有另一张图片,它位于第一张图片上方。我希望能够仅在第一张图片的边界内拖动第二张图片。为了让我的目标更清楚
我看过这个问题:UIImage Shadow Trouble 但接受的答案对我不起作用。 我想做的是获取一个 UIImage 并向其添加阴影,然后返回一个全新的 UIImage、阴影和所有内容。 这就
我有两张图片:第一张是用户个人图片,第二张是图标(角标(Badge))。 我想在第一个 uiimage(用户图像)的左下角添加第二个 uiimage(图标),并将它们保存到一个新的 Uiimage 中
我是一名优秀的程序员,十分优秀!