我正在使用Windows 7 64bit,visual studio 2010,opencv 2.4.2。
我正在尝试使用GPU猪检测器。
现在我可以使用自己的CPU生猪探测器(我的训练版)。
我的猪的细胞大小为Size(4,4)
。
然而,在opencv / modules / gpu / src / cuda / hog.cu中,它声明
// Other values are not supported
#define CELL_WIDTH 8
#define CELL_HEIGHT 8
或者,在opencv / modules / gpu / src / hog.cpp中,在
中cv::gpu::HOGDescriptor::HOGDescriptor( ... ) { ... CV_Assert(cell_size == Size(8, 8)); ... }
我认为这就是我的程序崩溃的原因。但是我不想使用单元格大小8.如何将其变为4?
答案 0 :(得分:4)
你有几个选择......
打开OpenCV HOG code并破解8x8约束。将#define
语句从8x8更改为4x4,并删除assert语句。重新编译OpenCV代码,然后运行您的应用程序。看看会发生什么......也许它会起作用。
如果上述想法都不起作用,您可以在CUDA或OpenCL中编写自己的GPU HOG代码。手写的HOG实现可以相当简洁,特别是如果您为特定情况硬编码单元大小和其他维度。但是,如果您不熟悉GPU编程可能需要一些时间来学习。
另外,我应该确定 - 如果你运行8x8单元格,OpenCV HOG是否正常运行,对吗?
答案 1 :(得分:0)
您真的不应该更改单元格的大小。像元大小为8,因为这是“足以执行渐变的像素”,但“执行任务没有太多”。如果像元大小为4,那么对于梯度强度和精度可能还不够有用?与其将单元格大小减小为4,为什么不将两个方向的图像大小都减小2?