Android 我们可以检查列表中是否存在重复图像吗?
我是图像处理新手。我的问题是 我用相机拍了一张照片,然后用这个照片对照列表容器检查。如果列表容器包含类似于此图像的图像,则执行操作,否则不执行 例如Android 我们可以检查列表中是否存在重复图像吗?,android,image,list,opencv,duplicates,Android,Image,List,Opencv,Duplicates,我是图像处理新手。我的问题是 我用相机拍了一张照片,然后用这个照片对照列表容器检查。如果列表容器包含类似于此图像的图像,则执行操作,否则不执行 例如 我有一张图片“img_one” 我的列表包含“图像一、图像二、图像三” 显示列表有一个图像(即,它看起来像此图像) 那么,如何对照列表容器中的项目检查此图像,并显示与此图像类似的图像 提前感谢朋友们。感谢所有想法。我认为opencv中不存在这样的功能。你必须自己循环检查像素,然后逐个检查。示例代码可以如下所示: bool identical(cv:
提前感谢朋友们。感谢所有想法。我认为opencv中不存在这样的功能。你必须自己循环检查像素,然后逐个检查。示例代码可以如下所示:
bool identical(cv::Mat m1, cv::Mat m2)
{
if ( m1.cols != m2.cols || m1.rows != m2.rows || m1.channels() != m2.channels() || m1.type() != m2.type() )
{
return false;
}
for ( int i = 0; i < m1.rows; i++ )
{
for ( int j = 0; j < m1.cols; j++ )
{
if ( m1.at(i, j) != m2.at(i, j) )
{
return false;
}
}
}
return true;
}
bool相同(cv::Mat m1,cv::Mat m2)
{
如果(m1.cols!=m2.cols | | m1.rows!=m2.rows | | m1.channels()!=m2.channels()| | m1.type()!=m2.type())
{
返回false;
}
对于(int i=0;i
如果您想在所有像素中迭代得更快一些,您可以查看。我认为opencv中不存在这样的函数。你必须自己循环检查像素,然后逐个检查。示例代码可以如下所示:
bool identical(cv::Mat m1, cv::Mat m2)
{
if ( m1.cols != m2.cols || m1.rows != m2.rows || m1.channels() != m2.channels() || m1.type() != m2.type() )
{
return false;
}
for ( int i = 0; i < m1.rows; i++ )
{
for ( int j = 0; j < m1.cols; j++ )
{
if ( m1.at(i, j) != m2.at(i, j) )
{
return false;
}
}
}
return true;
}
bool相同(cv::Mat m1,cv::Mat m2)
{
如果(m1.cols!=m2.cols | | m1.rows!=m2.rows | | m1.channels()!=m2.channels()| | m1.type()!=m2.type())
{
返回false;
}
对于(int i=0;i
如果你想在所有像素上迭代得快一点,你可以看看。我认为比较两幅图像需要花费一点时间。但是,您可以通过从适配器或使用ListView绑定图像的位置将该图像的二进制文件相互比较来进行检查。我认为比较两个图像的过程有点费时。但是,您可以通过从适配器或从使用ListView绑定图像的位置将该图像的二进制文件相互比较来检查它。这在很大程度上取决于您对“复制”的定义 如果你正在寻找完全相同的副本(复制粘贴),游戏很简单。Safir提出的方法,只需要一些性能改进,就可以了 如果你想找到几乎完全相同的副本,这项工作突然变得异常困难。查看此以了解更多信息 现在,回到“简单”方法,这取决于你要比较多少张图片。因为将文件夹中的每个图像与1000个图像中的所有其他图像进行比较,可以获得1.000.000个图像读取和比较。(因为你不能一次将它们全部存储在RAM中,你将不得不加载和卸载它们一百万次)这种方式对于一个强大的桌面处理器来说都太过分了 一种简单的方法是对每个图像使用散列函数(如sha2),然后只比较散列。一个很好的图像特别“散列”可能是直方图(尽管对于正片,您可能需要使用memcmp进行双重检查)
即使您尝试暴力方法(将每个图像像素与其他像素进行比较),一种更快的方法是使用memcmp(),而不是逐像素访问图像。这在很大程度上取决于您对“复制”的定义 如果你正在寻找完全相同的副本(复制粘贴),游戏很简单。Safir提出的方法,只需要一些性能改进,就可以了 如果你想找到几乎完全相同的副本,这项工作突然变得异常困难。查看此以了解更多信息 现在,回到“简单”方法,这取决于你要比较多少张图片。因为将文件夹中的每个图像与1000个图像中的所有其他图像进行比较,可以获得1.000.000个图像读取和比较。(因为你不能一次将它们全部存储在RAM中,你将不得不加载和卸载它们一百万次)这种方式对于一个强大的桌面处理器来说都太过分了 一种简单的方法是对每个图像使用散列函数(如sha2),然后只比较散列。一个很好的图像特别“散列”可能是直方图(尽管对于正片,您可能需要使用memcmp进行双重检查)
即使您尝试暴力方法(将每个图像像素与其他像素进行比较),更快的方法是使用memcmp(),而不是逐像素访问图像。@djaqeel in image processing我在图像处理中有@djaqeel的可写副本我在图像处理中有@djaqeel的可写副本