如何在C中通过opencv模糊图像?

时间:2017-06-28 15:11:27

标签: c opencv

我在C中使用opencv作为我的项目,我需要模糊图像。

这是我到目前为止所尝试的:

/*
Function displays the blurred image of the frame
Input: frame
Output: none
*/
void blurImage(link_t* frame)
{
    IplImage* imageSrc = cvLoadImage(frame->frame->path, 1); // frame->frame->path is the path of the image
    int i = 0;
    if (!imageSrc)//The image is empty.
    {
        printf("could not open or find image");
    }
    else
    {
        for (i = 1; i < 51; i += 2)
        {
            blur(imageSrc, imageSrc, Size(i, i)); // Not compiling - LNK error
        }
        cvShowImage("Display window", imageSrc); //display the blurred image
    }
}

我在网上看过很多关于这一点的内容以及我发现的所有答案都是在c ++ / python中,所以他们没有帮助我。

1 个答案:

答案 0 :(得分:0)

由于C中不存在blur()(仅在C ++或Python中),我使用了cvPyrDowncvPyrUp

使用向下功能然后向上移动图像会产生模糊效果(比如缩小图像大小会缩小分辨率,然后将其调整为正常)。

如何使用cvPyrDown here

代码:

void blurImage(void)
{
    IplImage* imageSrc = cvLoadImage("<Image path>", 1);
    IplImage* imageDst;
    if (!imageSrc)//The image is empty.
    {
        printf("could not open or find image");
    }
    else
    {
        imageDst = cvCreateImage(cvSize(imageSrc->width/2,imageSrc->height/2), imageSrc->depth, imageSrc->nChannels);
        cvPyrDown(imageSrc, imageDst, CV_GAUSSIAN_5x5); //Down size
        cvPyrUp(imageDst, imageSrc, CV_GAUSSIAN_5x5); // Up size
        cvShowImage("Display window", imageSrc); // Display the blurred image
        cvWaitKey(1000); // Wait for 1000 milliseconds
        cvReleaseImage(&imageDst);
        cvReleaseImage(&imageSrc);
    }
}