- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是 gpu 冲浪代码:
#include <iostream>
#include <iomanip>
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/imgproc/imgproc_c.h>
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
using namespace std;
using namespace cv;
using namespace cv::gpu;
void help()
{
cout << "\nThis program demonstrates using SURF_GPU features detector, descriptor extractor and BruteForceMatcher_GPU" << endl;
cout << "\nUsage:\n\tmatcher_simple_gpu <image1> <image2>" << endl;
}
int main(int argc, char* argv[])
{
GpuMat img1(imread("C:\\OpenCV2.3\\opencv2.3\\bin\\Debug\\tsucuba_left.png", CV_LOAD_IMAGE_GRAYSCALE));
SURF_GPU surf;
// detecting keypoints & computing descriptors
GpuMat keypoints1GPU, keypoints2GPU;
GpuMat descriptors1GPU, descriptors2GPU;
surf(img1, GpuMat(), keypoints1GPU, descriptors1GPU);
cout << "FOUND " << keypoints1GPU.cols << " keypoints on first image" << endl;
//cout << "FOUND " << keypoints2GPU.cols << " keypoints on second image" << endl;
CvCapture* capture = cvCaptureFromCAM(0);
int frame_width = (int) cvGetCaptureProperty(capture, 320);
int frame_height = (int) cvGetCaptureProperty(capture, 240);
cout<<"frames done\n";
GpuMat frame_gpu = GpuMat(frame_width, frame_height, CV_8UC3);
GpuMat frame_gpu_cvt = GpuMat(frame_width, frame_height, CV_8UC1);
cout<<"gpu frmes loaded\n";
IplImage* frame;
while(1)
{
frame =cvQueryFrame(capture);
CvMat* image = cvCreateMat(frame->height, frame->width, CV_8UC1);
/*CvMat* image = cvCreateMatHeader(frame->height, frame->width, CV_8UC1);
image->step = 4 * (image->cols * CV_ELEM_SIZE1(image->type) * CV_MAT_CN(image->type) / 4 + 1);//critical
cvCreateData(image);*/
cvInitMatHeader( image, frame->width, frame->height, CV_8UC1,frame->imageData);
// cvConvert( frame, image );
//cvCvtColor( frame, image, CV_RGB2GRAY );
cvConvertImage( frame, image, CV_RGB2GRAY);
namedWindow("aa", 1);
cvShowImage("aa", frame);
frame_gpu.upload(image);
cout<<"frame uploaded\n";
surf(frame_gpu, GpuMat(), keypoints2GPU, descriptors2GPU);
cout<<"surf done\n";
// matching descriptors
BruteForceMatcher_GPU< L2<float> > matcher;
GpuMat trainIdx, distance;
matcher.matchSingle(descriptors1GPU, descriptors2GPU, trainIdx, distance);
cout<<"match done\n";
// downloading results
vector<KeyPoint> keypoints1, keypoints2;
vector<float> descriptors1, descriptors2;
vector<DMatch> matches;
surf.downloadKeypoints(keypoints1GPU, keypoints1);
surf.downloadKeypoints(keypoints2GPU, keypoints2);
surf.downloadDescriptors(descriptors1GPU, descriptors1);
surf.downloadDescriptors(descriptors2GPU, descriptors2);
BruteForceMatcher_GPU< L2<float> >::matchDownload(trainIdx, distance, matches);
// drawing the results
Mat img_matches;
drawMatches(img1, keypoints1, frame_gpu, keypoints2, matches, img_matches);
cout<<"match done\n";
namedWindow("matches", 1);
imshow("matches", img_matches);
cvReleaseMat(&image);
frame_gpu.release();
cvReleaseImage(&frame);
img_matches.release();
cout<<"deallocation done\n";
waitKey(0);
}
cvReleaseCapture(&capture);
cout<<"work done";
return 0;
}
我们没有在 frame_gpu
中获取正确的图像,因此从 frame
获取图像时出现问题,我们打印 frame
使用:cvShowImage("aa", frame);
但是如果我们尝试 image
而不是 frame
只有空白屏幕
最佳答案
使用您的 IplImage
进行计数,然后使用此构造函数将其转换为 Mat
(在 C++ 中):
Mat(const IplImage* img, bool copyData=false);
所以你只需要做:
Mat myMat(img);
这将构成您的矩阵。您可以在程序的跟踪部分使用它!
注意:数据不会被复制。不过,如果您想要复制数据,可以将 copyData
参数设置为 true
。
关于opencv - 将 IplImage 转换为 CvMat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891061/
有没有办法在opencv中将cvMat转换为cvMAt*?我基本上必须将 Mat 对象转换为 cvMat*。所以最初我将 Mat 对象转换为 cvMat 对象。现在,我需要将其转换为 cvMat* 指
我只知道 C 语言,所以我很困惑/不理解 openCV 数据类型的语法,尤其是 cv::Mat, CvMat* , 垫子。 我的问题是如何将 cv::Mat 转换为 const CvMat* 或 Cv
大家好,我正在做一个项目。在这一步之前,我需要在 openCV 中使用函数 cvFindHomography 我已经应用了 LK 光流函数,所以我在第一帧和第二帧中获得了整数的特征,在 cvFindH
我正在制作一个可操纵的导数线路滤波器。我希望能够将其旋转任意角度。期望的情况如下: cvMat myMat; contains: 0, 0, 0 0, 0, 1 0, 0, 0 float angle
我正在尝试访问 cvMat 中的数据。 这是我的代码: // Declare int rank = 3; CvMat* warp_matrix = cvCreateMat(rank,rank,CV_3
img->data.ptr[i,j]=img1.data.ptr[(m_c*w_in)+n_c]; 我试过了,但它只显示了一个值。任何帮助都将不胜感激。 最佳答案 首先,您为什么要使用旧界面。如果你有
这看起来微不足道。我试过了 double d[2]; CvMat* cvdata; cvdata->data.db = d; 当我使用调试心情时,似乎只有第一个元素分配给 cvdata。 有什么建议吗
我有一个 cvMat 类型的 vector ,我一直在其中存储从我的计算机网络摄像头拍摄的帧。存储 100 帧后,我想回放这些帧。如果 record 是我的 cvMats vector ,我想这可能是
我正在使用 OpenCV 中的一些过滤器,但不知道如何在这个例子中乘以一个数字 (1/5) CvMat* kernel=0; IplImage* dst = cvCreateImage(cvG
这是我的代码的样子: // 10 rows and 2 cols matrix. CvMat* results = cvCreateMat(10, 2, CV_32FC1); // Some oper
如何打印 cvMat 是 RGB、BGR 还是 GRAY?我需要这样做的原因是因为我需要将图像转换为 GRAY 并且在尝试 CV_RGB2GRAY 时遇到这样的错误 OpenCV 错误:断言失败 (s
我有用于旋转的矩阵: CvMat* rot_mat = cvCreateMat(2, 3, CV_32FC1); cv2DRotationMatrix(center, angle, scale, ro
我正在尝试将图像(例如 80x20)的像素值从最低到最高排序。 下面是部分代码: bool sortPixel(int first, int second) { return (first v
我知道很多人对 IplImage 和 CvMat 之间的技术差异感兴趣。 (是的,不是 cv::Mat(*),而是 CvMat。)因此,让我们以实际为重点来澄清差异。 CvMat 是 IplImage
使用 CvMat 类型时,数据类型对于保持程序运行至关重要。 例如,根据您的数据类型是 float 还是 unsigned char,您可以选择以下两个命令之一: cvmGet(mat, row, c
在 openCV 备忘单 (C++) 中,我找到了矩阵运算 mean() .当我使用它时: float myMatMean = mean( MyMat ); 我得到错误: no suitable co
将cv::Mat转换为* CvMat的概念很难理解。您能否告诉我如何使用一些示例将其转换。我在win 7中使用带有vs的opencv2.1。 提前致谢, 问候, 阿兰加拉扬 最佳答案 Mat::ope
我需要使用 c++/cli 将图像发送到字节数组。图片最初是 Iplimage 格式。 int img_sz1 = img1->width * img1->height * img1->nCh
如 OpenCv 文档所述,Mat::copyTo()正在使用 Mat 类型的输入。 http://docs.opencv.org/modules/core/doc/basic_structures.
当我运行这段代码时 double a[]={1.0,2.0,3.0,4.0}; CvMat M=cvMat(8,8,CV_8UC1, a); cout<<"M.da
我是一名优秀的程序员,十分优秀!