您的位置:首页 > 运维架构

OpenCV 图像腐蚀、模糊、边缘检测{erode(),blur(),canny()}

2018-03-15 21:02 423 查看

一、图像腐蚀

函数为:                CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor=Point(-1,-1), int iterations=1,
int borderType=BORDER_CONSTANT,const Scalar& borderValue=morphologyDefaultBorderValue() );

二、图像模糊

函数为//! a synonym for normalized box filter
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT );

三、边缘检测

函数为//! applies Canny edge detector and produces the edge map.
CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize=3, bool L2gradient=false );

四、测试代码

#pragma once

class BaseDeal
{
public:
BaseDeal();
//图像腐蚀
void DealErode(std::string strFileName);
//图像模糊
void DealBlur(std::string strFileName);
//图像边缘检测
void DealCanny(std::string strFileName);
};
#include "stdafx.h"
#include "BaseDeal.h"

BaseDeal::BaseDeal()
{

}

void BaseDeal::DealErode(std::string strFileName)
{
Mat srcMat = imread(strFileName);
imshow("原图", srcMat);
Mat matElement = getStructuringElement(MORPH_RECT, Size(15,15));
Mat destMat;
erode(srcMat, destMat, matElement);
imshow("腐蚀", destMat);
waitKey(1000);
}

void BaseDeal::DealBlur(std::string strFileName)
{
Mat srcImage = imread(strFileName);
imshow("均值滤波{原图}", srcImage);

Mat destImage;
blur(srcImage, destImage, Size(7,7));

imshow("均值滤波{效果图}", destImage);
}

void BaseDeal::DealCanny(std::string strFileName)
{
Mat srcImage = imread(strFileName);
imshow("原始图{边缘检测}", srcImage);
Mat matEdge; //边缘Mat
Mat matGrayImage;//灰度图像Mat
//将原图转换为灰度图像
cvtColor(srcImage, matGrayImage, CV_RGB2GRAY/*CV_BayerRG2GRAY*/);
//使用3*3内核降噪
blur(matGrayImage, matEdge, Size(3,3));

//运行CANNY算子
Canny(matEdge, matEdge, 3,9,3);

imshow("边缘检测效果图", matEdge);
waitKey(1000);
}
main函数#include "stdafx.h"
#include "BaseDeal.h"

int main()
{
BaseDeal base;
//base.DealErode("F:/1.jpg");
//base.DealBlur("F:/1.jpg");
base.DealCanny("F:/2.jpg");
waitKey(6000);
}
结果图片
图像腐蚀:



图像模糊:



边缘检测:
这是由于cvtColor(srcImage, matGrayImage, CV_BayerRG2GRA
4000
Y); CV_BayerRG2GRAY>7,程序会崩溃,可能这个值过大会导致图片大小变大,最后结果图片可以看出只边缘检测了一小部分,还有一大部分被丢失掉了;



正确图像结果:



cvtColor这个函数存在OpenCV中有BUG,CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 ); code 的值不能超过7 ,也就是值为8就会崩溃。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐