如何在CUDA中创建全局变量?你能举个例子吗?
例如,如何在CUDA函数内创建数组
__global__ void test()
{
int *a = new int[10];
}
Run Code Online (Sandbox Code Playgroud)
或者如何创建全局数组并从此函数访问它.例如
__device__ int *a;
__global__ void test()
{
a[0] = 2;
}
Run Code Online (Sandbox Code Playgroud)
或者我如何使用如下...
__global__ void ProcessData(int img)
{
int *neighborhood = new int[8];
getNeighbourhood(img, neighbourhood);
}
Run Code Online (Sandbox Code Playgroud)
我还有一些问题.我发现比较
__device__
Run Code Online (Sandbox Code Playgroud)
如果我定义
"__device__ __constant__" (read only)
Run Code Online (Sandbox Code Playgroud)
将改善内存访问.但我的问题是我在主机内存中有一个数组说
float *arr = new float[sizeOfTheArray];
Run Code Online (Sandbox Code Playgroud)
我想把它作为设备中的变量数组,我需要在设备内存中修改它,我需要将其复制回主机.我该怎么做??
我一直在尝试创建模板内核,但是在我的程序中调用它们时遇到了一些麻烦.我有一个Matrix<T>
模板类,并在其中定义了一些方法
Matrix.h:
template <typename T> class Matrix {
...
void sum(Matrix<T>& m1, Matrix<T>& m2, Matrix<T>& sum);
...
}
#include "Matrix.cu"
Run Code Online (Sandbox Code Playgroud)
Matrix.cu:
#include "MatrixKernel.h"
template<typename T> void Matrix<T>::sum(const Matrix<T>& m, Matrix<T>& sum) {
...
sumKernel<T><<<dimGrid, dimBlock>>>(Matrix<T> m1, Matrix<T> m2, Matrix<T> sum)
...
}
Run Code Online (Sandbox Code Playgroud)
MatrixKernel.h:
template<typename T> __global__ void sumKernel(const Matrix<T> m1, const Matrix<T> m2, Matrix<T> sum) {
...
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我从sum中调用sumKernel时,编译器会给我以下错误:
error C2059: syntax error : '<'
Run Code Online (Sandbox Code Playgroud)
有人知道发生了什么吗?在我包含sumKernel调用之前,代码编译得很好.
谢谢.
我试图在3通道彩色图像上运行kmeans,但每次我尝试运行该功能时,它似乎崩溃,出现以下错误:
OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in unknown function, file ..\..\..\OpenCV-2.3.0\modules\core\src\matrix.cpp, line 2271
Run Code Online (Sandbox Code Playgroud)
我已经在下面添加了一些代码,以帮助指定传入的内容.非常感谢任何帮助.
// Load in an image
// Depth: 8, Channels: 3
IplImage* iplImage = cvLoadImage("C:/TestImages/rainbox_box.jpg");
// Create a matrix to the image
cv::Mat mImage = cv::Mat(iplImage);
// Create a single channel image to create our labels needed
IplImage* iplLabels = cvCreateImage(cvGetSize(iplImage), iplImage->depth, 1);
// Convert the image to grayscale
cvCvtColor(iplImage, iplLabels, CV_RGB2GRAY);
// Create the matrix for …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个QML扩展插件,我正在寻找一种方法来访问我刚刚实现的元素的大小.
现在,新元素(命名CustomElement
)可以通过定义用户想要的任何大小来创建它的宽度和高度值,因此在用户可以执行的QML文件中:
CustomElement
{
id: my_elem
width: 800
height: 600
}
Run Code Online (Sandbox Code Playgroud)
但是我希望能够在用户通过a配置大小时检索大小信息anchor
,如下所示:
Rectangle
{
width: 800
height: 600
CustomElement
{
id: my_elem
anchors.fill: parent
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何访问anchors
信息.
插件类定义为:
class CustomElement: public QDeclarativeItem
{
Q_OBJECT
//Q_PROPERTY() stuff
public:
// ...
};
Run Code Online (Sandbox Code Playgroud)
在插件的构造函数中,我设置QGraphicsItem::ItemHasNoContents
为false:
CustomElement::CustomElement(QDeclarativeItem* parent)
: QDeclarativeItem(parent)
{
qDebug() << "CustomElement::CustomElement parent is:" << parent;
setFlag(QGraphicsItem::ItemHasNoContents, false);
}
Run Code Online (Sandbox Code Playgroud)
加入调试后,我注意到,parent
就是0
,这也解释了为什么我不能与获取有用的信息boundingRect()
和其他方法.显然,问题是我的插件没有父母.我该如何解决这个问题?
我是否必须自己编译GStreamer?我可以使用Visual Studio 2010吗?
我正在努力找到一个很好的分步指南,说明如何做到这一点.有一个好的吗?
我的目标是在VS2010上使用QtGstreamer构建应用程序.
我想我应该cv::remap
用来消除失真,但无法弄清楚const Mat& map1, const Mat& map2
应该是什么地图来实现这一点.
我应该使用它cv::initUndistortRectifyMap
来找出价值观吗?如果是这样,我真的很感激一个例子.我没有固有的相机参数或不知道如何计算它们.谢谢.
如何检查opencv窗口是否已关闭?
我想要做:
cvNamedWindow("main", 1);
while(!cvWindowIsClosed("main"))
{
cvShowImage("main", myImage);
}
Run Code Online (Sandbox Code Playgroud)
但这些没有这样的cvWindowIsClosed(...)函数!
如何记录我正在编写的源代码,以便其他开发人员在将光标悬停时查看帮助说明 - 例如 - 我在Qt creator中创建的类名.我想做一些像将光标放在Qt类或函数名称上的帮助.
我是openCV的新手,但我想创建虹膜识别程序.虽然带网络摄像头的系统可以检测到眼睛,但是它不能检测到圆形虹膜.我正在使用Hough Circle Transformation.但是如果图像中的光圈不够圆,系统就无法检测到它.有什么解决方案吗?
使用的算法是霍夫圆变换.
IplImage *capturedImg = cvLoadImage("circle.jpg",1);
IplImage *grayscaleImg = cvCreateImage(cvGetSize(capturedImg), 8, 1);
cvCvtColor(capturedImg, grayscaleImg, CV_BGR2GRAY);
// Gaussian filter for less noise
cvSmooth(grayscaleImg, grayscaleImg, CV_GAUSSIAN,9, 9 );
//Detect the circles in the image
CvSeq* circles = cvHoughCircles(grayscaleImg,
storage,
CV_HOUGH_GRADIENT,
2,
grayscaleImg->height/4,
200,
100 );
for (i = 0; i < circles->total; i++)
{
float* p = (float*)cvGetSeqElem( circles, i );
cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])),
3, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])),
cvRound(p[2]), CV_RGB(0,0,255), 3, 8, 0 );
} …
Run Code Online (Sandbox Code Playgroud) c++ opencv image-processing hough-transform iris-recognition
我试图用C++创建一个小应用程序,它将返回概率值(实数从0到1),用于识别视频中的两个图片.我的想法是在某些视频材料中找到商业广告.我想从商业和最后一个切割第一帧.通过这种方式,我可以创建应用程序,使用OpenCV,将加载视频(电视内容),然后它将搜索从商业广告中捕获的第一帧.如果它找到它(概率超过SOME_PARAMETER),那么应用程序可以得出结论广告从那里开始.然后我想搜索最后一帧,如果找到它(再次概率超过SOME_PARAMETER),应用程序可以得出结论,在给定视频中真正存在商业广告.这只是一个想法.我是C++方面的专家,但对OpenCV来说却是新手.如果有人可以指出我,或举一个例子,将非常感激.当然,我对任何有关想法的建议持开放态度.谢谢,
M.
c++ ×9
opencv ×5
c ×3
cuda ×2
qt ×2
distortion ×1
gstreamer ×1
k-means ×1
plugins ×1
qml ×1
qt-creator ×1
qtgstreamer ×1
radial ×1
templates ×1
video ×1