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 filterCV_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 onceclass 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就会崩溃。
相关文章推荐
- 图像腐蚀,模糊,canny边缘检测,opencv中摄像头捕捉的图像
- iOS-Opencv 基础学习四(对图片进行图像模糊处理blur、边缘处理Canny)
- opencv学习(二)图像模糊及canny边缘检测
- OpenCV学习笔记 图像腐蚀模糊和边缘检测
- 【OpenCV学习笔记】2.3图像的腐蚀、膨胀、模糊、边缘检测
- Canny边缘检测源码与图像结果(OpenCV2.0)
- Canny边缘检测源码与图像结果(OpenCV2.0)
- 题目:opencv下对图像进行图像模糊(均值滤波)处理和边缘检测
- 【OpenCV学习笔记 004】 图像的缩放、Canny边缘检测和图像的二值化
- [学习opencv]图像sobel、laplacian、canny边缘检测
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
- 使用OpenCV对图像作边缘检测(Canny、Sobel、Laplace)
- opencv学习(三十二)之图像边缘检测Soble_Laplace_Canny
- OpenCV之imgproc 模块. 图像处理(2)实现自己的线性滤波器 给图像添加边界 Sobel 导数 Laplace 算子 Canny 边缘检测
- [Opencv入门笔记] 写图像—Canny边缘检测
- [Opencv入门笔记] 写图像—Canny边缘检测
- opencv 图像处理 形态学操作 腐蚀 膨胀 开闭运算 阈值二值化 图像卷积 图像金字塔 Sobel算子 Laplacian 算子 candy边缘检测 霍夫变换 直方图
- opencv读图像C语言实现canny边缘检测
- 图像处理--opencv2 canny边缘检测
- 【OpenCV】图像的变换(三)-Canny边缘检测