怎么在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;

本回答被提问者采纳
参考技术B 我也不知道啊啊啊啊啊啊,这都能撞到!!!!!!!!!!!

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做一个对图像的卷积?????的主要内容,如果未能解决你的问题,请参考以下文章

python下用OpenCV的圆形检测

我是在ubuntu10.04下用opencv2.3做一个连续捕捉摄像头视频的图像并将它保存成图片的程序,可是总是没有保存

Opencv C++ 在阈值图像中发现运动

如何去除图像上的卷线

在 Linux 下用 CMAKE 编译安装 OpenCV 3.2.0

如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?