Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我们可以检查列表中是否存在重复图像吗?_Android_Image_List_Opencv_Duplicates - Fatal编程技术网

Android 我们可以检查列表中是否存在重复图像吗?

Android 我们可以检查列表中是否存在重复图像吗?,android,image,list,opencv,duplicates,Android,Image,List,Opencv,Duplicates,我是图像处理新手。我的问题是 我用相机拍了一张照片,然后用这个照片对照列表容器检查。如果列表容器包含类似于此图像的图像,则执行操作,否则不执行 例如 我有一张图片“img_one” 我的列表包含“图像一、图像二、图像三” 显示列表有一个图像(即,它看起来像此图像) 那么,如何对照列表容器中的项目检查此图像,并显示与此图像类似的图像 提前感谢朋友们。感谢所有想法。我认为opencv中不存在这样的功能。你必须自己循环检查像素,然后逐个检查。示例代码可以如下所示: bool identical(cv:

我是图像处理新手。我的问题是

我用相机拍了一张照片,然后用这个照片对照列表容器检查。如果列表容器包含类似于此图像的图像,则执行操作,否则不执行

例如

  • 我有一张图片“img_one”
  • 我的列表包含“图像一、图像二、图像三”
  • 显示列表有一个图像(即,它看起来像此图像)
  • 那么,如何对照列表容器中的项目检查此图像,并显示与此图像类似的图像


    提前感谢朋友们。感谢所有想法。

    我认为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的可写副本