草庐IT

c++ - opencv cv::mat分配

你好,我有一个关于opencv的基本问题。如果我尝试使用cv::Mat类分配内存,我可以执行以下操作:cv::Matsumimg(rows,cols,CV_32F,0);float*sumimgrowptr=sumimg.ptr(0);但是我得到了一个错误的指针(Null)。在互联网上有人使用这个:cv::Mat*ptrsumimg=newcv::Mat(rows,cols,CV_32F,0);float*sumimgrowptr=ptrsumimg->ptr(0);而且在这里我得到了一个Null指针!但如果我最终这样做:cv::Matsumimg;sumimg.create(rows

计算机视觉Opencv实验合集——实验二:特征匹配

 在实验二当中我们将看到如何将一个图像中的特征点与其他图像进行匹配。我们将在OpenCV中使用蛮力(Brute-Force)匹配和FLANN匹配特征匹配主要是基于两种相似度较高的图片,通过Opencv里面提供的特征匹配方法来进行特征点之间的匹配和映射特征点由关键点和描述子两部分组成。例如:在一张图像中计算SIFT特征点时,是指提取SIFT关键点,并计算SIFT描述子两件事。关键点是指特征点在图像里的位置,有些特征点还具有方向、大小等信息。描述子是指一个向量,描述该关键点周围像素的信息,按照“外观相似特征应该有相似的描述子”的原则设计SIFT(尺度不变特征)做为最经典的特征提取算法,充分考虑图像

c++ - 为什么我们需要 crossCheckMatching 作为功能?

我正在阅读很多关于使用特征提取(siftecc)进行对象检测的文章。在计算了两个图像的描述符后,为了获得良好的匹配,他们使用了crossCheckMatching。(在sample/cpp/descritpor_extractor_matcher.cpp上找到)我能理解为什么这个选择吗?为什么我们需要评估两者descriptorMatcher->knnMatch(descriptors1,descriptors2,matches12,knn);descriptorMatcher->knnMatch(descriptors2,descriptors1,matches21,knn);我不明

c++ - 如何解决 imgproc.hpp 和 core.hpp 的错误?

我使用c++程序使用opencv2.1进行图像处理。该程序包含以下文件:#include"opencv2/core/core.hpp"#include"opencv2/imgproc/imgproc.hpp"#include"opencv2/highgui/highgui.hpp"#include#include#include但在调试程序后,我收到错误消息:fatalerrorC1083:无法打开包含文件:'opencv2/core/core.hpp':没有这样的文件或目录。这与imgproc.hpp和highgui.hpp相同,之后我更改了#include"opencv2/high

C# 到 C 代码 P/INvoke 多个标准 :string declarations lead to stack corruption

我构建了一个带有外部导出的c++dll,以便从我的C#程序中调用它。对于大多数函数,调用工作得很好,但是当我需要将一些字符串从C#传递到C++时会出现问题。我将它们作为普通字符串传递,并作为constchar*接收。它们都很好,所有数据都在那里,但随后我继续从这些char数组中定义了几个字符串。代码继续没有任何问题,直到我退出函数。然后它抛出一个异常,说最后定义的std::string周围的堆栈已损坏,我真的不确定为什么会这样。我尝试了很多定义字符串的方法:复制它们、更改P/Invoke定义的编码。一些额外的信息我从定时器线程调用这个函数;我提到这个是因为我发现,线程上的std::st

c++ - 黑屏视频采集opencv

我正在尝试测试一个非常简单的程序来使用相机捕获视频,但窗口似乎总是黑色的。摄像头灯亮,程序编译正常。#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#includeusingnamespacecv;usingnamespacestd;intmain(){VideoCapturestream1(0);//0istheidofvideodevice.0ifyouhaveonlyonecamera.if(!stream1.isOpened()){//checkifvideodevicehasb

python - 如何使用ctypes(C++到Python)将opencv3 cv::Mat转换为numpy数组?

我尝试通过使用cType将一个OpenCV3C::MAT图像转换成Python中的一个麻木数组。C++端是一个共享库,它正在从共享内存区域读取图像。共享内存正在工作,与此问题无关。extern"C"{unsignedchar*read_data(){shd_mem_offset=region->get_address()+sizeof(sFrameHeader);unsignedchar*frame_data=(unsignedchar*)shd_mem_offset;returnframe_data;}sFrameHeader*read_header(){sFrameHeader*f

opencv 人脸识别,并抓拍

#-*-coding:utf-8-*-importcv2importimutilsfromcrop_imgimportcrop_and_save_imageimportdatetime#加载摄像头cap=cv2.VideoCapture(0)#创建人脸检测器face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')#初始化人数计数器num_people=0#画面中人的数量init_people=0#all_people=0#整个视频中出现的人的数量i=dateti

c++ - 彩色图像之间的相似度测量(OpenCV)

我正在使用CBIR(基于内容的图像检索)项目,该项目将绘制图像的RGB直方图,并计算其他图像与查询图像之间的距离。我正在使用VS2008-MFC和OpenCV库。我想用欧几里德距离(ED)来计算距离,但不知怎么的我没能算出来。我找到了一个函数-cvCalcEMD2()可以帮助我计算两个直方图之间的距离。要使用此功能,我需要为我的直方图创建签名。这是一个exampleforcreatingsignature我发现的在For循环中,有一行我需要在我的直方图中传递:floatbin_val=cvQueryHistValue_2D(hist1,h,s);并且在我的直方图函数中没有变量h_bin

c++ - OpenCV - 混淆不同功能的位深度要求

我发现自己在我的C++opencv代码中执行了很多convertTo()调用。这有点令人困惑,在收到错误消息之前,我不确定何时需要转换图像的位深度。例如,我有一个Mat表示一个16U的图像。然后我尝试调用matchTemplate()并得到一个断言错误,它需要8U或32F。为什么模板匹配不能在16U上工作?当我显示图像时也会出现类似的问题(尽管位深度限制在显示图像的情况下更有意义)。我发现自己在摆弄convertTo()和缩放因子等尝试让图像正确显示imshow()并希望我能够更优雅地做到这一点(也许我被matlab的imagesc函数宠坏了)。我是否遗漏了一些关于openCV对位深度