- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须使用 OpenCV 2.4.6 来做 BOW(词袋),我所有的代码都是 C++。现在我想用 python 来做。
我搜索了 OpenCV-python 引用资料 ( http://opencv.willowgarage.com/documentation/python/ )。但我没有得到答案。然后从http://answers.opencv.org/question/10870/python-wrapper-for-bow/ ,我知道也许没有用于弓的 OpenCV-python。谁能找到它?
由于我已经使用 C++ 训练了词汇表,现在当我得到一张照片时,我想将 BOW 向量与词汇表进行比较。 C++ 使用 BOWImgDescriptorExtractor()
函数来完成。是否存在像BOWImgDescriptorExtractor()
这样的python代码?
最佳答案
我写了一个这样的示例代码,(1)首先,我们使用python c++ api训练bow词汇并保存到文件中。(2) 编写c++代码得到图像的弓形矢量化表示代码是:
vector<double> features;//store the feature
bool readVocabulary(const string& filename, Mat& vocabulary) {
FileStorage fs(filename, FileStorage::READ);
if (fs.isOpened()) {
fs["vocabulary"] >> vocabulary;
return true;
}
return false;
}
//imgpath is the image filepath, vocpath is the voc path
void getImgBow(char* imgpath, char* vocpath) {
cv::initModule_nonfree();
Ptr<FeatureDetector> featureDetector = FeatureDetector::create("SURF");
Ptr<DescriptorExtractor> descExtractor =
DescriptorExtractor::create("SURF");
Ptr<DescriptorMatcher> descMatcher =
DescriptorMatcher::create("FlannBased");
Ptr<BOWImgDescriptorExtractor> bowExtractor;
if (featureDetector.empty() || descExtractor.empty() || descMatcher.empty()) {
cout << "featureDetector or descExtractor was not created" << endl;
}
bowExtractor = new BOWImgDescriptorExtractor(descExtractor, descMatcher);
Mat vocabulary;
readVocabulary(vocpath, vocabulary);
bowExtractor->setVocabulary(vocabulary);
Mat img = imread(imgpath);
if (img.rows < img.cols)
cv::resize(img, img, Size(320, 240));
else
cv::resize(img, img, Size(240, 320));
vector<KeyPoint> keypoints;
Mat descriptors;
featureDetector->detect(img, keypoints);
bowExtractor->compute(img, keypoints, descriptors);
for (int j = 0; j < descriptors.cols; j++) {
float value = descriptors.at<float> (0, j);
features.push_back(value);
}
}
(3),我们将c++代码编码为python模块:
PyObject* wrap_contentfilter(PyObject* self, PyObject* args) {
//parse the python parameters.
if (!PyArg_ParseTuple(args, "sssOO", &imgpath, &vocpath, &modelpath,
&candidate_list, &can_pro_lsit))
//you may use PyInt_AsSsize_t and so on to do type change.
//invoke getImgBow function.
//construct PyObject and return to python, use PyList_SetItem function,PyObject*
}
static PyMethodDef predictMethods[] = { { "content_filter", wrap_contentfilter,
METH_VARARGS, "get image's bow, predict" }, { NULL, NULL } };
extern "C"
void initcontentfilter() {
PyObject* m;
m = Py_InitModule("contentfilter", predictMethods);
}
(4)我们写了一个python例子来调用c++函数。
import contentfilter
contentfilter.content_filter(parameters)
(5)编译c++函数:
g++ -fPIC content_filter.cpp -o contentfilter.so -shared -I/usr/local/include -I/usr/include/python2.7 -I/usr/lib/python2.7/config -L/usr/local/lib -lopencv_highgui -lopencv_nonfree -lopencv_legacy -lopencv_ml -lopencv_features2d -lopencv_imgproc -lopencv_core
(6) python example.py
关于python - OpenCV - 是否存在在 python 中执行 BOW(词袋)的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200084/
我正在创建一袋视觉词来对视频进行分类。我没有使用 SURF 描述符,这就是为什么我不能使用 OpenCV 的 BOWImgDescriptorExtractor 来实现此目的。我提取了我的描述符并自己
关于这个https://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html 我们有一个我无法理解的 Bow/BowB
我正在尝试使用 SVM 分类和 BoW 聚类算法实现实时对象分类程序。我的问题是选择正面和负面训练图像的良好做法是什么? 正面图像集 背景应该为空吗? 意思是,图像应该只包含感兴趣的对象吗?当实时实现
有人可以向我解释 Tensorflow BoW 编码器正在做什么/返回什么吗?我希望得到每个文档的字数向量(就像在 sklearn 中一样),但是,显然它正在做一些更花哨的事情。 在这个例子中: ht
我需要做 BOW(词袋),但我只有描述的图像关键点。目前,我已经使用以下方法获得了词汇表: cv::BOWKMeansTrainer bowtrainerCN(numCenters); //num c
我正在尝试在 CSS3 中制作一个直 Angular 三 Angular 形,我有这一部分。但是我怎样才能用弧形/弓形制作呢? (很抱歉,我不知道如何最好地将其翻译成英文)。 这是我需要的: 这可能吗
我正在尝试编写一个代码,用给定的输入绘制一个领结。 领结: * * *** *** ********** *** *** * * 我在这里研究 2 种
我想在 Python 中包装额外的 OpenCV 函数,例如 BoW,我该怎么做? 一种方法可能是在 modules/python 下的 CMakeLists.txt 中添加头文件,但是我如何只编译
我无法训练 SVM 识别我的对象。我正在尝试使用 SURF + Bag Of Words + SVM 来做到这一点。我的问题是分类器没有检测到任何东西。结果全部为0。 这是我的代码: Ptr dete
在 java 文档示例中,lock.unlock()方法使用了两次,一次是在 impendingBow() 方法中,一次是在 Bow() 方法中。我的问题是,不应该lock.unlock() impe
我正在尝试构建文本分类模型。我的目标是将 10000 个文档中的每个段落分类为是否包含有关“罢工事件”的信息。 首先,我按照基本的预处理步骤将段落转换为术语文档矩阵 (CountVectorizer)
我一直在尝试使用关键点和词袋技术在 Python OpenCV 3.2.0 中创建图像分类器。经过一番阅读后,我发现我可以按如下方式执行此操作 使用 AKAZE 提取图像描述符 对描述符进行k-mea
我正在尝试在 opencv 中使用 Freak 来检测特征并提取描述符,然后构建我的 BOW 词汇表,并为每个图像使用词汇表来匹配 BOW。你知道,整件事。我知道 BOW 可以与 SIFT 或 SUR
我在 android 中使用 Here map sdk。我已将弓形动画应用于居中标记和所有其他内容。当我将它与 ios 代码进行比较时,它比 ios 慢。我怎样才能使这里 map 的内置动画更快? 谢
我必须使用 OpenCV 2.4.6 来做 BOW(词袋),我所有的代码都是 C++。现在我想用 python 来做。 我搜索了 OpenCV-python 引用资料 ( http://opencv.
我在许多论文中看到,在使用 ORB 特征处理特征匹配时需要使用汉明距离。我一直在使用 C++ 中的 opencv 中的 BoW 模型,发现与使用 BruteForce 匹配器(Hamming 或 Ha
据我所知,在 Bag Of Words 方法中,特征是一组单词及其在文档中的频率计数。另一方面,N-grams,例如unigrams也完全一样,只是没有考虑单词出现的频率。 我想使用 sklearn
我正在尝试使用 NodeJS 中的请求模块发送对 Pitney Bownes Reverse-Geolocation API 的访问。 发送以下 HTTP 请求会返回错误。 request("http
我是一名优秀的程序员,十分优秀!