OpenCV:将 ilLoadImage 替换为 cv::imread
OpenCV: Replace ilLoadImage with cv::imread
我正在使用hessgpu
来有效地计算使用GPU的Hessian-affine SIFT描述符。
在这个项目中,Devil用于读取图像:如果调用SiftGPU::RunSIFT(const char *imgpath)
(在此处实现),则ilLoadImage
在GLTexImage中使用.cpp用于读取图像(作为RGB图像)。
但是,在我的项目中,我使用cv::imread
来读取图像。该项目提供了从用户直接提供的数据计算描述符SiftGPU::RunSIFT(int width, int height, const void * data, unsigned int gl_format, unsigned int gl_type)
。
所以我尝试了:
cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
sift.RunSIFT(img.cols, img.rows, img.data, GL_LUMINANCE, GL_UNSIGNED_BYTE);
但这产生的关键点比sift.RunSIFT("image.jpg");
略少。我尝试使用:
cv::Mat img = cv::imread("image.jpg");
sift.RunSIFT(img.cols, img.rows, img.data, GL_RGB, GL_UNSIGNED_BYTE);
但这会产生 0 个关键点,因此会发生非常错误的事情。我认为:
iLoadImage
使用 RGB 图像,而到目前为止我发现的唯一使用cv::imread
的工作方法仅适用于灰度图像。- 魔鬼可能使用与OpenCV不同的过程来读取图像,特别是对于RGB图像(因为使用第二种方法产生了0个关键点)。
如何使用cv::imread
执行等效的ilLoadimage
?
类型似乎有问题,试试这个:
Mat img = imread("image.jpg");
sift.RunSIFT(img.cols, img.rows, img.data, GL_BGR, GL_3_BYTES);
或者这个
cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
sift.RunSIFT(img.cols, img.rows, img.data, GL_RED, GL_UNSIGNED_BYTE);
将runSift
行更改为:
sift.RunSIFT(img.cols, img.rows, img.data, GL_BGR, GL_UNSIGNED_BYTE);
解决了问题并产生了确切数量的描述符。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 错误:"imread"未在此范围内声明
- 开放 CV 中的动态内存分配,用于视频处理
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- Inference pytorch C++ with alexnet and cv::imread image
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- OpenCV:将 ilLoadImage 替换为 cv::imread
- 为什么 cv::imread 在包含 tensorflow 的标头后返回 NULL。
- 与iMread相比,qimage to cv ::垫子转换了奇怪的行为
- cv::imread() 会导致内存损坏
- IplImage的cvLoadImage工作,但cv::imread的cv::Mat不工作
- 如何解决错误:imread不是cv的成员
- 错误:未定义对"cv::imread(std::string const&, int)"的引用
- 未定义的引用 cv::imread(std::string const&, int)
- OpenCV "未定义的引用'cv::imread' 等 C++
- Opencv, undefined reference to 'cv::imread(??cv::String const&???, int)'