Tag: 图像处理

我的Opencv应用程序处理速度非常慢

我正在构建一个OpenCV应用程序,它可以从相机中捕获video,并在删除背景后将其覆盖在另一个video上。 我无法达到合理的速度,因为它以大约1 fps的速度播放输出,而我的背景移除工作速度为3fps。 有没有办法以正常速度显示背景video并以3fps覆盖已处理的video? 我试着评论我的代码,我意识到问题主要在于渲染部分本身。 我尝试显示video和我的网络摄像头,我注意到用openCV显示的实际fps和video的fps有所下降。 这是示例代码: void main() { CvCapture* capture, *Vcap; capture = cvCaptureFromCAM(0); if(!capture) { printf(“Video Load Error”); } Vcap = cvCaptureFromAVI(“bgDemo.mp4”); //printf(“\nEntered BGR”); if(!Vcap) { printf(“Video Load Error”); } while(1) { IplImage* src = cvQueryFrame(Vcap); if(!src) { Vcap = cvCaptureFromAVI(“bgDemo.mp4”); continue; } IplImage* bck1 = cvCreateImage(cvGetSize(src),8,3); cvResize(src,bck1,CV_INTER_LINEAR); cvShowImage(“BCK”,bck1); cvWaitKey(1); } }

OpenCV:cvHoughCircles使用中出错

我使用cvHoughCircles在下图中找到两个白色椭圆: 我首先使用阈值来定位白色区域,然后使用霍夫变换。 但输出结果不正确,如下所示: 我无法理解发生了什么? 为什么它检测到3个圆圈以及为什么只有一个被正确检测? 有什么建议? 以下是我的代码: #include “opencv2/highgui/highgui.hpp” #include “opencv2/imgproc/imgproc.hpp” #include #include #include #include #include #include “opencv/cv.h” #include “opencv/highgui.h” #include #include using namespace cv; using namespace std; int main( ) { IplImage* image = cvLoadImage( “testing.bmp”, CV_LOAD_IMAGE_GRAYSCALE ); IplImage* src = cvLoadImage(“testing.bmp”); CvMemStorage* storage = cvCreateMemStorage(0); cvThreshold( src, src, 200, 255, CV_THRESH_BINARY ); CvSeq* […]

在opencv中找到凸性缺陷?

我有一个程序来计算图像的凸包。 我正在尝试使用此信息来计算输入图像中存在的手指数量。 从一些冲浪我发现这样做(计数手指)的方法是 寻找轮廓 凸壳 凸性缺陷 但是我在使用凸性缺陷函数时遇到了麻烦。 编译很好,但在运行时程序崩溃与某些输入图像,但没有其他人,我似乎无法弄清楚为什么。 这些是输入图像 此图像导致崩溃 但事实并非如此。 即使它与上面类似, 这也会导致崩溃 码.. #include #include #include #include #define CVX_RED CV_RGB(0xff,0x00,0x00) #define CVX_GREEN CV_RGB(0x00,0xff,0x00) #define CVX_BLUE CV_RGB(0x00,0x00,0xff) int main(int argc, char* argv[]) { cvNamedWindow( “original”, 1 ); cvNamedWindow( “contours”, 1 ); cvNamedWindow( “hull”, 1 ); IplImage* original_img = NULL; original_img = cvLoadImage(“img.jpg”, CV_LOAD_IMAGE_GRAYSCALE ); IplImage* […]

如何通过编程方式将照片转换为Polaroid-like?

如何将现代照片转换为宝丽来照片的外观和感觉? 欢迎提供参考和/或示例代码。 谢谢!

在C中使用FFTW的高通滤波器

我有一个关于FFT的问题。 我已经设法在C中使用FFTW向前和向后进行FFT。现在,我想应用高通滤波器进行边缘检测,我的一些消息来源说只是将幅度的中心归零。 这是我的输入图片http://sofzh.miximages.com/c/2wnxvfl.jpg 基本上我所做的是: 正向FFT 将输出转换为2D数组 进行FFT移位 当距离中心的距离为高度的25%时,将real和imag值设为0 产生幅度 进行反向FFT移位 转换为1D数组 做后向FFT。 这是原始幅度,处理幅度和结果 http://sofzh.miximages.com/c/aysx9s.png 有人可以帮助我,告诉我哪个部分是错的,以及如何在C中使用FFTW进行高通滤波 谢谢。 源代码: unsigned char **FFT2(int width,int height, unsigned char **pixel, char line1[100],char line2[100], char line3[100],char filename[100]) { fftw_complex* in, * dft, * idft, * dft2; //fftw_complex tmp1,tmp2; fftw_plan plan_f,plan_i; int i,j,k,w,h,N,w2,h2; w = width; h = height; N = w*h; […]

水泥效应 – 艺术效果

我希望对图像产生影响,其中所得到的图像看起来好像是在粗糙的水泥背景上绘制的,并且水泥背景在边缘附近自定义以突出它们…请帮助我编写算法来生成这样的效果。 第一张图像是原始图像 第二个图像是我正在寻找的输出。 请注意检测到边缘并且边缘在边缘附近变化以清楚地指示边缘

C中最快的抖动/半色调库

我正在开发一个自定义瘦客户端服务器,为其客户端提供渲染的网页。 服务器在多核Linux机器上运行,Webkit提供了html渲染引擎。 唯一的问题是客户端显示受限于4位(16色)灰度调色板。 我目前正在使用LibGraphicsMagick抖动图像(RGB-> 4bit灰度),这是服务器性能的明显瓶颈。 分析表明,超过70%的时间用于运行GraphicsMagick抖动函数。 我已经探索了stackoverflow和Interwebs的高性能解决方案,但似乎没有人在各种图像处理库和抖动解决方案上做任何基准测试。 我会更乐意发现: 什么是关于抖动/半色调/量化RGB图像到4位灰度的最高性能库。 是否有任何特定的抖动库或任何可以指向我的公共域代码片段? 在高性能方面,您更喜欢哪些库来操作图形? 首选C语言库。

OpenGL中的位图渲染方法?

我最近在纯C中一直在研究一点位图解析器,只是为了理解更简单的图像格式的低级工作。 到目前为止,使用维基百科关于位图文件的文章 ,我能够(至少我认为)正确地解析信息 – 至少,大部分都是如此。 问题是我不太确定该怎么做:因为我一直在使用3.1上下文,我可以访问更多现代化的function,这很好,尽管我还是迷路了。 我有一个使用GLFW的窗口设置,到目前为止还没有真正渲染任何东西,因为我一直专注于解析/低级细节。 由于我正在努力避免查看实际的代码示例, 如果有人能够向我解释渲染位图背后的过程是什么,只使用OpenGL / GLFW和ISO C标准库,那就太酷了。 虽然我有几个着色器,并且我能够毫无问题地加载它们,但我认为我需要做的是渲染一个符合尺寸(宽度,高度)的[不可见]四边形。图像本身,然后将像素数据传递给OpenGL。 然而,主要问题是着色器的设置如下: 顶点着色器 #version 150 #extension GL_ARB_separate_shader_objects : enable layout(location = 0) in vec2 Position; layout(location = 1) in vec2 UV_In; out vec2 UV; void main() { gl_Position = vec4( Position, 0.0f, 1.0f ); UV = UV_In; } 片段着色器 #version 150 #extension GL_ARB_separate_shader_objects […]

提取扫描文档的一部分(个人ID) – 选择哪个库和方法?

我必须处理大量扫描的ID,我需要从中提取照片以便进一步处理。 这是一个虚构的例子: 问题是扫描没有完全对齐(旋转到10度)。 所以我需要找到他们的位置,旋转它们并剪下照片。 事实certificate这比我原先想象的要困难得多。 我检查了OpenCV,我发现的唯一的东西是矩形检测,但它没有给我很好的结果:矩形在样本上并不总是匹配得足够好。 此外,它的图像匹配算法仅适用于非旋转图像,因为它只是一种powershell比较。 所以我虽然使用ARToolkit(增强现实库),因为我知道它能够非常精确地在图像上找到给定的标记。 但似乎标记必须非常简单,所以我不能为此目的使用文档的常量部分(如果我错了请纠正我)。 另外,我发现在Ubuntu 11.10上编译它非常困难。 OCR – 还没有尝试过这个,在我开始研究之前,我会感谢任何建议寻找什么。 我寻找C(优选)/ C ++解决方案。 Python也是一个选项。

无法将’cv :: VideoCapture’转换为’CvCapture *’

我有一个简单的程序,它拍摄video并播放它(虽然它对video进行了一些图像处理)。 可以从对话框结果中检索video,也可以直接通过提供文件路径来检索video。 当我使用cv :: CvCapture capture1时 ,我得到了像capture1.isOpen(), capture1.get(CV_CAP_PROP_FRAME_COUNT)等属性,但是当我使用CvCapture * capture2时,我得到了奇怪的错误。 我想使用cv :: CvCapture capture1,因为我的函数与capture1一致 。 或者有没有办法使用这两种类型之间的某种转换,如类型转换或其他东西。 实际上我有两个程序,program1的function是cv :: CvCapture ,program2的function是CvCapture * 。 我的意思是这两个程序以不同的方式读取video文件。 然后我合并了这两个程序,以使用program1中的一些函数和program2中的一些函数。 但我无法将cv :: CvCapture转换为CvCapture * 。 我正在使用OpenCv和Qt Creator。 我的代码在这里发布很长,但我已经简化了我的代码,使其更小,更容易理解。 我的代码可能无法正确编译,因为我修改它以使其更简单。 任何帮助,将不胜感激。 提前致谢 :) void MainWindow::on_pushButton_clicked() { std::string fileName = QFileDialog::getOpenFileName(this,tr(“Open Video”), “.”,tr(“Video Files (*.mp4 *.avi)”)).toStdString(); cv::VideoCapture capture1(fileName); // when I use the […]