您好我正在尝试编写CUDA内核来执行以下代码.
for (n = 0; n < (total-1); n++)
{
a = values[n];
for ( i = n+1; i < total ; i++)
{
b = values[i] - a;
c = b*b;
if( c < 10)
newvalues[i] = c;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我目前所拥有的,但它似乎没有给出正确的结果?有谁知道我做错了什么.干杯
__global__ void calc(int total, float *values, float *newvalues){
float a,b,c;
int idx = blockIdx.x * blockDim.x + threadIdx.x;
for (int n = idx; n < (total-1); n += blockDim.x*gridDim.x){
a = values[n];
for(int i = n+1; i < …
Run Code Online (Sandbox Code Playgroud) 我一直在研究一个涉及扫描文档上的几个预处理的项目.预处理的一部分是偏斜检测和校正.在歪斜检测和校正之前,我对文档图像进行了二值化处理.
我想看一些项目或示例代码.谢谢 !!
我已经安装了OpenCV的库,但我仍然得到错误
$ G ++ -I/usr/include目录/ OpenCV的/ -L -lcxcore -lhighgui HELLO.CPP -o你好
/tmp/ccjjrbXr.o:在功能main':
hello.cpp:(.text+0x2d): undefined reference to
cvLoadImage"
collect2:LD返回1退出状态
当我检查库的路径时,我得到
$ pkg-config --libs opencv
-lml -lcvaux -lhighgui -lcv -lcxcore
我写了一个非常简单的程序来测试它:
enter code here
#include< cv.h>
#include< highgui.h> /* required to use OpenCV's highgui */
#include< stdio.h>
int main() {
IplImage* img = 0;
printf("Hello\n");
img = cvLoadImage("lena.jpg", 0 );
}
Run Code Online (Sandbox Code Playgroud)
我的安装有问题,但我真的无法搞清楚.任何指导将受到高度赞赏!谢谢
当我跑:
$ pkg-config --cflags --libs opencv
-I/usr/local/include/opencv -I/usr/local/include
/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so
/usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so
/usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so
/usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so
/usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so
/usr/local/lib/libopencv_nonfree.so …
Run Code Online (Sandbox Code Playgroud) 我正在使用opencv和Qt来创建一个应用程序.在应用程序内部,我正在创建一个记录视频的小工具.出于这个原因而不是阻止主事件线程我创建了一个包含记录线程的单独对话框.在这个初学者的线程中我想看到相机输出(我还没有介绍录制代码).所以我分类QThread
了,run()
功能如下:
void VideoRecordThread::run(){
cv::VideoCapture capture;
cv::Mat frame;
QImage img;
qDebug() << "Opening camera" << cameraIndex ;
capture.open(cameraIndex);
if(!capture.isOpened()){
qDebug() << "Could not open camera" << cameraIndex;
emit threadReturned();
return;
}
while(!stopFlag){
capture >> frame;
qDebug() << "Frame Width = " << frame.cols << "Frame Height = " << frame.rows;
if(frame.cols ==0 || frame.rows==0){
qDebug() << "Invalid frame skipping";
continue;
}
img = cvMatToQImage(frame); //Custom function
emit imageCaptured(img);
}
capture.release();
emit threadReturned(); //Custom signal
qDebug() << "Thread …
Run Code Online (Sandbox Code Playgroud) 我正试图检测黑/白点目标的中心,就像在这张照片中一样.我试过使用cv2.HoughCircles方法但是1,我只能检测2到3个目标,2,当我将找到的圆绘制回图像时,它们总是略微偏移.
我使用了错误的方法吗?我应该使用findContours还是完全不同的东西?
这是我的代码:
import cv2
from cv2 import cv
import os
import numpy as np
def showme(pic):
cv2.imshow('window',pic)
cv2.waitKey()
cv2.destroyAllWindows()
im=cv2.imread('small_test.jpg')
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
#I've tried blur,bw,tr... all give me poor results.
blur = cv2.GaussianBlur(gray,(3,3),0)
n,bw = cv2.threshold(blur,120,255,cv2.THRESH_BINARY)
tr=cv2.adaptiveThreshold(blur,255,0,1,11,2)
circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 3, 100, None, 200, 100, 5, 16)
try:
n = np.shape(circles)
circles=np.reshape(circles,(n[1],n[2]))
print circles
for circle in circles:
cv2.circle(im,(circle[0],circle[1]),circle[2],(0,0,255))
showme(im)
except:
print "no cicles found"
Run Code Online (Sandbox Code Playgroud)
这是我目前的输出:
我有一个OpenCV应用程序来自办公室内部的网络摄像头流(很多细节),我必须找到一个人工标记.标记是在白色背景的一个黑角规.我使用Canny来查找边缘和cvFindContours进行轮廓加工,然后使用aboutPolyDP和co.用于过滤和查找候选者,然后使用局部直方图进一步过滤,bla bla bla ...
这或多或少有效,但不完全是我想要的.FindContours总是返回一个闭环,即使Canny创建一个非闭合线.我得到一个轮廓走在线的两侧形成一个环.对于坎尼图像(我的标记)上封闭的边缘,我得到2个轮廓,一个在里面,和其他在外面.我不得不对这个操作有问题:
我为每个标记得到2个轮廓(不是那么严重)
最简单的过滤是不可用的(拒绝非闭合轮廓)
所以我的问题是:是否可以为非封闭的Canny边缘获得非闭合轮廓? 或者解决上述两个问题的标准方法是什么?
Canny是一个非常好的工具,但我需要一种方法将2D黑白图像转换为易于处理的东西.类似连接组件的东西,列出组件的步行顺序中的所有像素.所以我可以过滤循环,并将其提供给approxPolyDP.
更新:我错过了一些重要的细节:标记可以处于任何方向(它不是面向摄像机的正面,没有直角),实际上我正在做的是3D方向估计,基于标记的2D投影.
我试图检测两个白色墙壁上的红色墙壁和白色方块的图像中的位置,红色顶部和白色"柱子":
我的方法是进行阈值处理以找到我现在可以从输出中轻松检测到的红色墙壁:
现在我的问题是检测白色方块的位置,但考虑到白色墙壁,这更难.如果我基于白色的阈值,我仍然在白色方柱之间保留不需要的白色墙壁.
任何帮助将不胜感激.
我正在寻找一种测量openCV FPS的正确方法.我找到了几种方法.但它们都不适合我.
我测试过的第一个使用time_t start和time_t end.一旦它返回一个转储函数作为fps x时间图(我真的无法想象fps图如何成为转储函数),我认为一个是错误的.
这是这个情节的形象.
我测试的第二个使用t =(double)cvGetTickCount()来测量fps.一旦它返回120 fps,这种方式是错误的,但是,对于30秒长度,以120 fps捕获的视频不应该花费超过1分钟来处理.所以这是衡量FPS的错误方法.
有人知道在openCV中测量FPS的另一种方法吗?
PS.我正试图在视频的每一帧中找到圆圈.视频帧尺寸为320x240像素.
更新2 我正在尝试测量FPS的代码.
for(;;){
clock_t start=CLOCK();
Mat frame, finalFrame;
capture >> frame;
finalFrame = frame;
cvtColor(frame, frame, CV_BGR2GRAY);
GaussianBlur(frame, frame, Size(7,7), 1.5, 1.5);
threshold(frame, frame, 20, 255, CV_THRESH_BINARY);
dilate(frame, frame, Mat(), Point(-1, -1), 2, 1, 1);
erode(frame, frame, Mat(), Point(-1, -1), 2, 1, 1);
Canny(frame, frame, 20, 20*2, 3 );
vector<Vec3f> circles;
findContours(frame,_contours,_storage,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE );
vector<vector<Point> > contours_poly( _contours.size() );
vector<Rect> boundRect( _contours.size() );
vector<Point2f>center( …
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)