怎么在c++的平台下用opencv做一个对图像的卷积?????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在c++的平台下用opencv做一个对图像的卷积?????相关的知识,希望对你有一定的参考价值。
用下列模板[1,2,1;0,0,0;-1,-2,-1],还有[1,1,1;1,-8,1;1,1,1],麻烦高手指点~~~~~~
参考技术A 利用函数cvFilter2D该函数的原型为:( const CvArr* src, CvArr* dst,const CvMat* kernel,CvPoint anchor=cvPoint(-1,-1));
src :输入图像.
dst:输出图像.
kernel:卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用 cvSplit 函数分解图像到单个色彩通道上,然后单独处理。
anchor :核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。
函数 cvFilter2D 对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素插值得到边界外面的象素值。追问
看不是很懂,麻烦给我一个完整的代码,谢谢了~~~~~~~~高手~~~~~
追答int main( int argc, char** argv )
IplImage *src = 0, *dst = 0, *dst2 = 0;
/*float k[9] = 0, 1, 0,
1,-4, 1,
0, 1, 0; */
float k[9] = 1.f/16, 2.f/16, 1.f/16,
2.f/16, 4.f/16, 2.f/16,
1.f/16, 2.f/16, 1.f/16; // 这里高斯核滤波器归一化
CvMat Km;
//cvInitMatHeader( &Km, 3, 3, CV_32FC1, k, CV_AUTOSTEP );
Km = cvMat( 3, 3, CV_32F, k );
// 0: force to gray image
src = cvLoadImage("lena.jpg", 0);
dst = cvCloneImage( src );
cvNamedWindow("src", 0);
cvShowImage("src",src);
cvNamedWindow("filtering", 0);
cvFilter2D( src, dst, &Km, cvPoint(-1,-1));
cvShowImage("filtering",dst);
cvWaitKey(0);
cvReleaseImage( &src );
cvReleaseImage( &dst );
return 0;
Opencv C++ 在阈值图像中发现运动
【中文标题】Opencv C++ 在阈值图像中发现运动【英文标题】:Opencv C++ finding movement in a thresholded image 【发布时间】:2011-08-24 13:45:11 【问题描述】:我正在使用带有 C++ 的 openCv,并且我试图在不同的光照条件下找到一个移动的球。到目前为止,我能够通过使用 HSV 颜色空间对其进行阈值化来过滤图像。这样做的问题是它会拾取具有相似颜色的其他对象。每次有一个不同颜色/背景的球时,要计算出确切的 hsv 范围是非常乏味的。
我有没有办法对阈值二值图像应用任何过滤器以仅检测移动的对象?这样我只会找到球而不是其他物体,因为它们通常是静止的。
谢谢,
瓦伦
【问题讨论】:
它是移动球的静止快照,还是从该图像的一帧移动到下一帧? 它将从一帧移动到下一帧。我在网络摄像头提要上执行此操作。谢谢, 【参考方案1】:最简单的方法是在图像序列中进行帧差分/背景学习。
帧差:减去两个连续的帧,结果是运动的部分(你可能只会得到运动物体的边缘)
背景学习:例如平均构建超过 50 帧,这将是您学习的背景,然后减去当前帧,不同的是移动部分
【讨论】:
我四处寻找这个,我理解这个概念,但我很难在 C++ 中实现它。你有什么建议吗? 究竟是什么问题?看来您已经熟悉 opencv。 响应延迟了很多,但这确实帮助我解决了之后的问题。我只需要多读一点。谢谢以上是关于怎么在c++的平台下用opencv做一个对图像的卷积?????的主要内容,如果未能解决你的问题,请参考以下文章
我是在ubuntu10.04下用opencv2.3做一个连续捕捉摄像头视频的图像并将它保存成图片的程序,可是总是没有保存