首先介绍几个OpenCV的函数
void cv::erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue())
src-需要进行腐蚀的原始输入图像,图像的通道数是任意的,但要求图像的深度必须是:
CV_8U、CV_16U、CV_16S、CV_32F、CV_64F其中的一种。
其中Kernel可以通过调用getStructuringElement得到,其定义形式为
Mat cv::getStructuringElement(
int shape,
Size ksize,
Point anchor=Point(-1,-1))
该函数返回一个用于形态学操作的指定大小的形状的结构元素。
shape -cv::MorphShapes中任意一个元素形状
Ksize-结构元素的大小MORPH_REC 矩形
MORPH_CROSS 十字型
MORPH_ELLIPSE 椭圆
Anchor取默认值把
下面是程序部分代码:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <QString>
#include <QMessageBox>
#include <QTextCodec>
#include <QDebug>
#include <QImage>
#include <QPixmap>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
cv::Mat srcImage,dstImage,tempImage;
QImage img;
~Widget();
public slots:
void onErodeBtn();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
下面是腐化代码:
void Widget::onErodeBtn()
{
//定义类型
int erosion_type;
erosion_type = cv::MORPH_RECT;
//定义大小
int erosion_size=3;
//调用getStructuringElement
cv::Mat element=cv::getStructuringElement(erosion_type,
cv::Size(2*erosion_size+1,2*erosion_size+1),
cv::Point(erosion_size,erosion_size));
//调用腐蚀函数
cv::erode(srcImage,dstImage,element);
//显示图片
img = QImage((const unsigned char*)(dstImage.data),dstImage.cols,dstImage.rows,dstImage.cols*dstImage.channels(), QImage::Format_RGB888);
img=img.scaled(ui->label_D->size());
ui->label_D->setPixmap(QPixmap::fromImage(img));
}
下面是程序源码打包
地址:http://download.csdn.net/detail/qq78442761/9734987
下面是运行结果: