gpt4 book ai didi

opencv - Mat的OpenCV-Cant访问元素(具有描述符)

转载 作者:行者123 更新时间:2023-12-02 16:57:07 30 4
gpt4 key购买 nike

我正在编写一个简单的程序,该程序从图像中提取描述符并将其写入文件。

我将描述符保存在Mat变量中,但是在尝试访问它们时得到了错误的值。

这是代码:

        string s = format("%s\\%s\\img%d.ppm", dataset_dir.c_str(), dsname, k);
Mat imgK = imread(s, 0);
if( imgK.empty() )
break;

detector->detect(imgK, kp);
descriptor->compute(imgK, kp, desc);

//writing the descriptors to a file
char fileName[512];
sprintf(fileName,"C:\\BinaryDescriptors\\OpenCVRes\\%s\\%s\\Descriptors%d.txt",descriptor_name,dsname,k);
FILE * fid;
fid=fopen(fileName,"a+");
for (int ix=0; ix< kp.size(); ix++){

fprintf(fid,"%f \t%f", kp[ix].pt.x,kp[ix].pt.y);
fprintf(fid, "\t1 \t0 \t1");
fflush(fid);
//writing the descriptor
for (int jx=0;jx<desc.cols;jx++){
int gil = desc.at<int>(ix,jx);
printf("AAAA %d", gil);
fprintf(fid,"\t%d",desc.at<int>(ix,jx));
fflush(fid);
}
}
fprintf(fid,"\n");
fclose(fid);

我正在访问描述符矩阵的行是int gil = desc.at int(ix,jx);我做错什么了吗?

任何帮助将不胜感激,因为我很困:)

谢谢,

吉尔

最佳答案

您正在使用int访问描述符矩阵,因此矩阵必须为CV_32SC1类型。您确定是那种类型吗?大多数描述符使用float(CV_32F)或unsigned char(CV_8U)进行编码。检查desc.type() == CV_32SC1

顺便说一句,您应该使用cv::FileStorage保存和加载描述符,这比直接访问文件容易得多。

关于opencv - Mat的OpenCV-Cant访问元素(具有描述符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641697/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com