当前位置: 首页 > 知识库问答 >
问题:

用k近邻法获取具有一定像素值的所有图像像素

宦瀚
2023-03-14

我想获得图像中的所有像素,像素值最接近图像中的某些像素。例如,我有一个图像,它有海洋(深蓝色),晴空(浅蓝色),海滩和房屋的观点。我想找到所有最接近深蓝的像素,以便将它归类为水。我的问题是天空也被归类为水。有人建议使用K近邻算法,但网上很少有使用旧C样式的例子。谁能给我提供使用OpenCv C++的K-NN的例子吗?

共有1个答案

东郭阳德
2023-03-14

“将其归类为水”和“以最接近图像中某些像素的像素值获取图像中的所有像素”并不是一个任务。颜色属性对于您描述的分类是不够的。你将永远有许多相同的颜色点在水和天空。所以你得用更详细的分析。例如,如果你知道你的物体是自连接的,你可以使用类似水丝的东西来填充这个区域,而忽略天空中与水颜色相同的远距离和不连接的区域(假设你将成功地通过边缘检测器地平线检测到水和天空)。

你也可以使用更多关于你想要选择的对象的信息,比如结构:计算它的熵等,然后你也可以在多维空间中使用k-最近邻算法,其中第一个3维是颜色,第四个熵等,但是你也可以简单地检查每个图像像素是否在所选像素区域的Epsilon邻域(我的意思是颜色-熵4D空间,颜色的3维+熵的1维),使用简单的欧几里德度量--这是相当快的,并且可以被GPU加速。

 类似资料:
  • 我只想弄清楚我的概念-访问CV::MAT的所有矩阵元素是否意味着我实际上访问了图像的所有像素值(灰度-1通道,颜色-3通道)?假设我的代码打印灰度矩阵的值(加载1通道图像,类型为CV_32FC1),如下所示,那么这意味着我只访问cv::mat的成员,还是我也访问图像的像素值(具有1通道灰度,类型为CV_32FC1)? 我对使用OpenCV进行图像处理还是一个新手,我想澄清一下我的想法。如果我错了,

  • 基本上我的问题分为两部分。 > 我想知道将要操纵像素并将特定颜色转换为透明像素的首选/快速方法。 我想知道我是否能够使用这个“BuffereImage”,而不必将其保存为支持“png”等透明度的文件格式 我找到了一种设置单个像素的方法 这儿呢 正如它所提到的,这是一种“缓慢的方法” 我发现这个线程Java:用透明像素填充BufferedImage 哪一条评论提到了“int[]”和操纵像素。 本质上

  • 问题内容: 但是我需要一个Java等效项。我需要一个图像类型(如,,…),该图像类型可以完全透明(alpha = 0)保留此颜色。当然还有一种将其保存为文件的方法。 问题答案: import java.awt.; import java.awt.image. ; 修改代码以使每个像素透明 来源:http://www.rgagnon.com/javadetails/java-0265.html

  • 实际上我想对每个像素做一些计算,为此我需要显式地访问每个像素。 如有任何帮助或建议,我们将不胜感激。

  • 问题内容: 我正在寻找从中获取像素数据(以表格形式)的最快方法。我的目标是能够解决像素从使用图像。我发现的所有方法均不执行此操作(大多数方法都返回)。 问题答案: 我只是在玩同一个主题,这是访问像素的最快方法。我目前知道执行此操作的两种方法: 使用的答案中所述的BufferedImage 方法。 通过直接使用以下方式访问像素数组: 如果你要处理大图像并且性能是一个问题,则第一种方法绝对不是可行的方

  • 下面是我得到的控制台输出和错误: 下面是我按下Get Images按钮后的控制台输出,您可以看到图像的url为: