使用OPENCV提高图像量表并最大化分辨率
Increasing image scale and maximizing resolution using opencv?
我刚刚开始研究opencv,我查看了一些类似的问题,但我没有发现答案有帮助。我有许多图像,像素尺寸为50宽和50个heigh(拇指指甲尺寸)。
我对以下内容有些困惑:
q。通过增加这些图像的规模,我是否会自动增加分辨率?还是我需要执行其他功能?
至关重要的是,我可以在增加图像规模的同时获得最大分辨率。
我正在使用以下功能:
int IncreaseScale()
{
char *image_name {"./image/my_image.jpg"};
cv::Mat Image;
Image = cv::imread(image_name, 1);
if(!Image.data)
{
//Cant find image
return 0;
}
const float rescale_value {4.10};
cv::Mat Image2;
cv::resize(Image, Image2, cvSize(0, 0), rescale_value, rescale_value);
return 1;
}
如这里的人们先前所述,在增加图像大小时,使用插值非常有限。您正在使用以前的分辨率中的像素来猜测他们增加图像的分辨率时其值是什么。尽管图像将是更高的分辨率,但质量不会更好。
已经提出了一种克服这一点的技术是超级分辨率的想法。这样做的想法是,当您查看场景时,您会拍摄几个不同的图像,以查看不同的观点。每个图像在其他图像以前从未见过的信息上都有一些微小的差异。您确定每个观点的独特之处,然后将这些信息结合在一起,以使质量更好的图像流。不幸的是,这与单个图像无效,因为没有其他信息可以从图像流中提取。您可以使用同一观点的多个图像。在摄像机传感器上引入的噪声轮廓应足以为超级分辨率算法提供不同的信息,以便产生更高质量的高尺度图像。实际上,超级分辨率的想法是拍摄几张具有"低质量"的图像,并通过将其信息组合到最终图像中来创建高质量的结果。这个想法已经存在了一段时间,不仅与图像处理有关,而且在科学中的显微镜和成像领域有关。
仅使用一个图像进入人为创建超级分辨率图像的区域,这些图像可能会根据图像而起作用,也可能不起作用。拥有图像流将具有更高的成功概率。您可以在此处阅读有关超级分辨率的更多详细信息:http://www.infognition.com/articles/what_is_is_super_resolution.html
幸运的是,OPENCV确实具有实现超级分辨率的模块,并且可以在超级分辨率模块中找到。您 do 需要以一系列图像为食,输出将是一系列图像,在所需的更高分辨率下具有更高质量。
可以在OpenCV的GitHub repo上找到有关如何使用超级分辨率模块的代码示例:https://github.com/opencv/opencv/blob/master/master/master/samples/gpu/super_resolution.cpp。不要愚弄来源的位置。即使将其放置在GPU示例下,该代码旨在处理if
语句中的CPU和GPU案例。该代码只需采用视频供稿,并具有所需的分辨率,它将输出基于超分辨率的结果。
是的,此代码有效地执行了4.1x"数字缩放",因此输出图像应具有分辨率205 x 205或类似的分辨率。当未指定的左图时,调整大小会使用双线性插值来提高采样。结果将具有更高的分辨率,但不会比原始的低分辨率图像更明显。
- 使用分辨率定理用Z3证明
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- Opencv 恢复到比我设置的更高的分辨率
- 最大化数组总和
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- GTK 最大化表单 C++
- C/C++ 位数组分辨率转换算法
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何在C++中为高分辨率时钟声明变量?
- 给定数字的浮点分辨率
- 如何在C++中最大化SSD I / O?
- 过载分辨率和用户定义的转换
- 使用 2x1 图块平铺 2xM 数组以最大化差异 - INOI 2008,P2
- QScreen geometry()api为分辨率2736 x 1824和2560 x 1600提供了错误的值
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 获取可能的屏幕分辨率列表
- wx帧缺少最大化按钮
- std::array<const T, n> vs std::array<T, n> 过载分辨率
- 模板转换运算符的分辨率不明确
- 使用OPENCV提高图像量表并最大化分辨率