我在想:
1)实现所有黑白图像,然后为检查它是否是彩色图像的方法制作包装器。如果是,则拆分通道,分别对每个通道进行操作,然后合并它们。
2)根据我正在处理的内容,使用函数器来正确更新值。问题是编译器错误会非常复杂,而我并不习惯它,我想我最终可能需要相当多的编译器错误。我不确定这是不是一个好主意。
这里可能有一个正确的设计模式,我也看不到。也可能有一种方法可以在OpenCV中实现通道/颜色不可知,尽管我还没有找到它,到目前为止,我正在阅读的书(OpenCV 2计算机视觉应用程序编程指南)还没有向我展示这种可能性。
发布于 2011-08-16 03:35:33
如果速度很重要,那就不要。
这听起来像是您试图使用OO技术或类似技术来封装或抽象像素类型。这可能会为每个像素访问添加额外的间接层,从而扼杀您的性能。
如果你调用的是一个函数,而不是一个指向一个函数的指针(例如,委托,覆盖的方法,函数器),这对于CPU来说仍然是更快的,但是如果你正在做函数调用,请重新考虑;它们仍然是额外的工作,如果你能将所有东西都嵌套在外部for循环中,它看起来会很丑陋,函数编程的势利者会嘲笑你,记住,这不是一个很难维护的大型LOB应用程序。这就是为什么工程师仍然可以完美地维护30年的quickbasic代码,问题空间不需要更智能的东西(但是通常他们的问题本身需要比我聪明得多的东西!)
如果你想提高速度,最好实现针对每种图像进行优化的简单操作(例如,阈值操作或调整大小)。您还可以研究变换矩阵,看看是否可以这样完成您的工作。这样你就可以只写两个变换算法(b&w),并且使用一个相似(或相同)的矩阵对两种类型的图片做同样的事情。
因此,无论如何都要实现抽象、无缝重用、关注点分离的主要目标。和启动速度(但希望不会重启!)祝好运
发布于 2011-08-16 03:07:10
拆分通道可以与独立处理通道的算法一起很好地工作;并不是所有的算法都这样做,因此这将是相当有限的。您还将花费一些时间和空间来制作所有这些副本。
关于函数,我假设你的意思是用你的算法函数做模板,用一个像素类型作为模板参数。这也可以工作,但这意味着定义您的基本像素操作的方式,它们可以实现为函数或运算符的通用像素类型。这比看起来更难,应该在你有一些实现算法的经验之后再做。
未提及的第三个选项是将黑白图像提升为全色,对其进行处理,并转换回黑白图像。这以牺牲黑白图像为代价来优化全色处理。
发布于 2011-08-16 03:34:58
对于大多数算法来说,不必担心单色图像与彩色图像之间的差异。您可以使用单色图像的灰度值,也可以计算亮度/强度/任何颜色并使用它。您可以通过查看哪个颜色空间会给出您想要的结果来选择测量亮度等。
当你已经计算出如何修改你的图像时,你可以使用一些像素感知处理,例如,混合两个像素可能是pixel_a*0.5 + pixel_b*0.5,你的像素类将解决如何将其应用于不同的颜色通道,即Pixel::operator+(const Pixel &),Pixel::operator*(float)等。
有单独应用于每个颜色通道的算法,但它们不是那么常见,而且颜色的时空变化之间经常存在一些相关性,因此您不会做一些基本的事情,因为处理每个通道完全独立。
https://stackoverflow.com/questions/7069085
复制相似问题