Java 该如何判断一张图片是否是纯色的图片呢?

2022-08-31 16:55:52 +08:00
 c00WKmdje2wZLrSI

除了每个像素循环判断过去,还有什么快一些的办法吗?

2677 次点击
所在节点    问与答
25 条回复
Jooooooooo
2022-08-31 16:56:42 +08:00
纯色什么定义?
murmur
2022-08-31 17:02:26 +08:00
搜了一下,方法大多是使用 c 库缩放图片到小尺寸,比如 16*16 ,这样肯定有误差,但是总比对着几 k 分辨率图片遍历性能要好
AoEiuV020CN
2022-08-31 17:06:16 +08:00
对计算机来说,没有比遍历更高效准确的了,
可以牺牲准确的话直接在遍历的时候选择性跳过一些就是了,
villivateur
2022-08-31 17:10:46 +08:00
如果是用通用 CPU 去计算,肯定只能遍历。
当然你可以想象其他办法,比如用 GPU 加速,或者用 FPGA 专门写个用于判断图片纯色的方案。
ipwx
2022-08-31 17:25:05 +08:00
@murmur 奇怪,Java 不是能做到和 C/C++ 性能差不多嘛。

缩放还要做平均,理论上直接遍历更快才对啊
ipwx
2022-08-31 17:30:22 +08:00
jdhao
2022-08-31 17:33:33 +08:00
理论上不遍历,你不可能确定,另外需要考虑是否需要像素值完全一样,还是感官上一样,例如 (255,255,255) 和 (255, 254, 255) 是否一样?
paramagnetic
2022-08-31 17:41:30 +08:00
对图片做 FFT 然后检查是否只有 DC 分量( doge )
LeegoYih
2022-08-31 17:58:57 +08:00
1. 如果图片大部分不是纯色的,那么遍历是最快的
2. 允许小概率出现错误,采样就行,随机取 30%的像素点判断
3. 外包给印度人,肉眼判断
cpstar
2022-08-31 18:09:12 +08:00
利用压缩?特别是摘要压缩?
xtreme1
2022-08-31 18:13:51 +08:00
@ipwx 这种大量小对象的情况就是 native 语言的核心阵地, java 多一个 12 bytes 的 header, 很多时候就决定了内循环能不能放进 L1.
z1113456051
2022-08-31 18:14:19 +08:00
先按段或者求余分 n 组,比较每组的第 m 个都相同。
murmur
2022-08-31 18:20:02 +08:00
@ipwx 这个命题的回答者应该默认 java 开发者没有高深的内存管理能力,而且用的库对内存和 cpu 指令集有优化吧

要不提这个问题的早就自己去实践了,干嘛去提问。。
lakehylia
2022-08-31 18:23:19 +08:00
判断所有点是否聚集,不是用方差吗?
lakehylia
2022-08-31 18:29:40 +08:00
回忆了下,这不就是聚类算法嘛。。。
wasd6267016
2022-08-31 18:49:22 +08:00
准确算法的话无论如何都要遍历吧 少读一个像素都不行
XuHuan1025
2022-08-31 18:50:34 +08:00
.isBlank
TimePPT
2022-08-31 19:57:59 +08:00
搞几百张你认为的纯色图片,直接训个二分类器就行。
fox0001
2022-08-31 23:55:55 +08:00
1 )图片都是位图吗?有没有矢量图?

2 )回复里都提到,纯色是怎样定义?要不要考虑色差范围?

3 )如果纯色的定义是每一个像素的颜色值都相同,那只能逐个像素遍历。正如 16 楼所言。

4 )文件处理,不是 Java 的强项。好像 stream 针对这种情况的遍历优化过,但也不会快太多。并发处理的话,理论上更快。这方面我缺乏经验,也不能给太多详细建议。
TimPeake
2022-09-01 00:03:12 +08:00
随机取 N 次 个点坐标色值?如果相同则是纯色 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876772

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX