OpenCV从blob检测中返回关键点坐标和面积,Python
我遵循了一个斑点检测示例(使用cv2.SimpleBlobDetector),并在我的二进制图像中成功检测到了斑点.但是后来我不知道如何提取关键点的坐标和区域.这是斑点检测的代码: # I skipped the parameter setting part. blobParams = cv2.SimpleBlobDetector_Params() blobVer = (cv2.__version__).split('.') if int(blobVer[0])
8 2024-04-01
编程技术问答社区
如何为Wongkinyiu/Yolov7姿势估计准备自定义关键点数据集?
如何为 wongkinyiu/yolov7 yolov7 ? > 解决方案 此处描述了关键点格式 https://cocodataset.org/#format-data 特别是这条线 annotation{ "keypoints" : [x1,y1,v1,...], ... } 说关键点是一个数组x1,y1,v1,.... 官方的Yolov7-Pose Github 下载它,打开并转到目录labels\train2017.您可以打开任何txt文件,您会看到看起来像这样的行 0 0.671279 0.617945 0.645759 0.726859 0.519751 0.381250 2.000000 0.550936 0.348438 2.000000 0.488565 0.367188 2.000000 0.642412 0.354687 2.000000 0.488565 0.395313 2.000000 0.738046 0
16 2023-12-25
编程技术问答社区
将关键点转换为矩阵或将其保存为文本文件 opencv
我在(OpenCV开源)中提取了SIFT功能,并将其提取为关键点.现在,我想将它们转换为矩阵(带有x,y坐标)或将它们保存在文本文件中... 在这里,您可以看到用于提取关键点的示例代码,现在我想知道如何将它们转换为垫子或将其保存在TXT,XML或YAML ... 中 cv::SiftFeatureDetector detector; std::vector keypoints; detector.detect(input, keypoints); 解决方案 转换为cv :: mat如下. std::vector keypoints; std::vector points; std::vector::iterator it; for( it= keypoints.begin(); it!= keypoints.end();it++) { points
8 2023-11-17
编程技术问答社区
检测图像关键点 --javaCV --EXCEPTION_ACCESS_VIOLATION
我是Java开发人员.我的目标是使用Javacv 检测图像关键点 这是我的代码: final CvMat image1 = cvLoadImageM("im1.png" , 0); final CvMat image2 = cvLoadImageM("im2.png", 0); SIFT sift = new SIFT(); FeatureDetector featureDetector =sift.getFeatureDetector(); KeyPoint keypoint1 = new KeyPoint(); KeyPoint keypoint2 = new KeyPoint() ; featureDetector.detect(image1, keypoint1 , null); featureDetector.detect(image2,keypoint2, null);
42 2023-05-10
编程技术问答社区
使用OpenCV获取指定点的SIFT描述符
我想获得指定点的SIFT功能.这些点不是由Kepoint检测器手动获得的.我的问题是:我只知道点的位置,但对大小和角度值不了解.我应该如何设置此值? 这是我的代码: int main() { Mat img_object = imread("img/test.jpg", 0); SiftDescriptorExtractor extractor; Mat descriptors; std::vector keypoints; // set keypoint position and size: should I set // size parameter to 32 for 32x32 patch? KeyPoint kp(50, 60, 32); keypoints.push_back(kp); extractor.compute( img_object, keypoints
24 2023-05-10
编程技术问答社区
OpenCV-只显示关键点而不是使用SIFT的图像
我尝试 使用此示例代码绘制关键点(无图像): import cv2 import numpy as np img = cv2.imread('test.png') gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) sift = cv2.SIFT() kp = sift.detect(gray,None) img=cv2.drawKeypoints(gray,kp) cv2.imwrite('sift_keypoints.jpg',img) 我尝试了cv2.drawKeypoints(None,kp)和cv2.drawKeypoints(kp),但无济于事. 有什么想法可以实现? 谢谢. 解决方案 您可以通过在相同形状的原始图像形状的黑色图像上绘制 键盘. 这是我使用的图像: i然后获得了关键点: 然后,我创建了具有相同大小的原始图像的纯色图像,并在其上绘制了这些关键. voila仅关键点
42 2023-05-10
编程技术问答社区
OPENCV 2.4.6使用大量内存筛分检测
我们在OpenCV 2.4.3中使用了SIFT,我们决定升级到OpenCV 2.4.6. 升级后,内存使用率从OpenCV 2.4.6中的大约(150MB)跳到1.2GB. 有人知道这是一个错误还是我们现在需要配置的东西? 我们的图像具有1.4MB.在iOS上观察到了这种行为.这个问题似乎也在Linux(Centos)中发生. tks 解决方案 我记得其中一个版本中有一个关于KePoint提取的错误.我看到了Orb,所以我不知道这里是否有同样的问题,但是我告诉您,如果有任何帮助. 问题是,在提取新关键点之前,关键点提取器没有清除输出向量: vector keys; cv::Mat descs; cv::ORB orb; for(...) { orb(image, mask, keys, descs); // bug: keypoints were accumulated in "keys" } 我必须这样修补:
10 2023-05-10
编程技术问答社区
关键点描述符 OpenCV
我试图了解如何在OpenCV中获得给定KeyPoint的描述符.到目前为止,我的代码看起来如下: #include #include "opencv2/opencv.hpp" typedef cv::Mat Image; int main(int argc, const char * argv[]) { Image imgA = cv::imread("images/buddhamulticam_total100.png", CV_LOAD_IMAGE_GRAYSCALE); Image imgB = cv::imread("images/buddhamulticam_total101.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Ptr det
36 2023-05-10
编程技术问答社区
关键点描述符匹配:如何计算每个模板的拟合优度?
我不确定它是属于stackoverflow还是其他stackexchange网站 - 在这里非常欢迎输入. 我已经使用Python OpenCV将目标图像的Brisk关键点描述符匹配 - 依次 - 三个不同的模板. 什么是一种实用,健壮的,统计的方法来决定哪个模板是最合适的模板? 现在,我计算了cv2.RANSAC cv2.findHomography返回的in inlier的数量(顺便说一句,它没有返回拟合统计量),并取下数字最高的模板. 我已经看了描述距离的直方图,这些直方图总是以大约105(单位?)为中心(怪异). . https://en.wikipedia.org/wikipedia.org/wiki/wiki/random_sample/random_samplesum_samplesusus 似乎很有用. 指导非常感谢 - 谢谢! 解决方案 这开始是评论,但越长. 的确,OpenCV在内部计算回归误差,并且不会返回.但是,
20 2023-05-09
编程技术问答社区
opencv::KeyPoint的班级成员class_id的含义和用途是什么?
在OPENCV 2.4.3 KeyPoint::class_id的参考手册中被描述为"可以用它们属于的对象聚类的对象ID". 由于缺乏我对"关键点"的足够知识,我无法理解class_id的目的是什么. 我的另一个问题是,通过使用功能检测器,描述符和匹配器,我们可以在训练图像中检测到查询对象的匹配关键点.但是,如何在训练图像中分割查询对象.我们可以使用Grabcut或流域算法吗?如果是,如何? 任何一个问题的答案都会有所帮助. 预先感谢... 解决方案 实际上,可以使用class_id成员字段来存储您发现对每个关键点有用的任何信息.如文档所说,您可以存储,例如,检测到的对象的ID. 例如,您有一个图像,从中提取关键点(例如带有冲浪),运行一些具有这些功能的对象检测器,其结果是,每个输入功能现在包含在class_id中,或-1如果它们连接到没有对象.我实际上不知道该字段是否由某些OPENCV函数填充,还是仅供您使用. 关于您的第二个问题,匹配功能可
18 2023-05-09
编程技术问答社区
什么是图像处理的关键点?
使用OPENCV时,通常使用SIFT或SURF等算法来检测关键点.我的问题是这些关键点实际上是什么? 我知道它们是图像中某种"兴趣点".我也知道它们是规模不变的并且是圆形的. 另外,我发现它们有方向,但我不明白这是什么.它是一个角度,但在半径和某些地方之间?你能说明一些解释吗?我认为我首先需要的东西更简单,然后更容易理解论文. 解决方案 让我们一个一个一个一个点: 我的问题是这些关键点是什么? 关键点与兴趣点是相同的.它们是空间位置,或者是图像中定义什么是有趣的或图像中突出的点.兴趣点检测实际上是仿射转换顺便说一句...)或遭受失真(即投射转换或同型),在与原始图像进行比较时,您应该能够在此修改后的图像中找到相同的键盘.这是我前一段时间写的一篇文章的示例: 来源:模块无属性'drawMatches'opencv python 右侧的图像是左图的旋转版本.我也只显示了两个图像之间的前10场比赛.如果您查看前10场比赛,那么我们可能想关注的观点可以
46 2023-05-09
编程技术问答社区
在Colab中,用 "imgaug "进行图像数据增强时,没有按预期进行。
我正在增强我的图像数据集,其中还包含关键点.因此,我正在使用imgaug库.以下是增强代码: kps = KeypointsOnImage(__keypoints, shape=_image.shape) seq = iaa.Sequential([ iaa.Affine( scale={"x": (0.8, 1.2), "y": (0.8, 1.2)}, # scale images to 80-120% of their size, individually per axis translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)}, # translate by -20 to +20 percent (per axis) rotate=(-90, 90), # rotate by -45 to +45 degrees order=[0, 1], # use nearest neighbour
使用BRISK检测器/描述器OpenCV的性能问题
当我在OpenCV中使用Brisk进行功能检测和描述时,我会遇到性能问题. 基本上,我尝试匹配我从此图像中获得的所有描述符: 使用我从图像数据库中使用基于Flann的匹配器从图像数据库中获得的所有描述符,并带有LSH算法和Brisk用于功能检测和描述. 我的图像数据库由242张图像组成.在这242张图像中,有三个图像对应于上述"复杂"图像查询中分别采用的每个对象. 这是用于Brisk检测的参数(默认OPENCV参数): TRESHOLD:30,八度:4,图案比例:1.0. 使用最佳匹配技术flann匹配(图像查询中的每个描述符都与其在数据库描述符集中的最近邻域关联),我的算法输出了数据库图像列表,该列表按匹配百分比排序.这是四个第一个结果: 图像对应于数据库中的螺栓:4个匹配/15检测到的键盘=>匹配百分比: 26.7%. 与数据库中瓶子相对应的图像具有4个匹配/15个检测到的关键点=>匹配百分比: 26.7%. 与数据库中螺栓相对应的图像具有10
48 2022-11-24
编程技术问答社区
ucrtbase.dll。一个无效的参数被传递给了一个认为无效参数是致命的函数
我目前正在使用 OpenCV 进行个人项目,在执行该程序期间遇到了一些问题.在实现了 AKAZE + BOW 识别器(它似乎对我的问题不够好)后,我想尝试 SIFT(最终是 SURF)实现. 对于我的项目,我正在关注 github 我在 Windows 10 上使用 VS2015(社区)和 OpenCV 2.4.13. 如标题所述,我遇到的问题在于 ucrtbase.dll,它在执行期间获取了无效参数(如果我正确读取其他线程,则 dll 应该是 Windows 10 中的操作系统库).当 for cicle 进入第二次迭代时(也就是它应该为 BOW 训练获取另一张图像的特征时)出现问题,此时执行停止并出现标题中的错误. 我尝试了各种方法(例如,对检测器/提取器使用不同的构造函数或注释部分代码),在调试会话期间,错误似乎是由检测函数引起的,但我不确定原因(也,如下面的代码中所述,注释检测功能及其后的功能可以解决问题). drawKeypoints 函数(在另一个测试
1548 2022-08-02
编程技术问答社区