原图
类型
|
说明
|
BORDER_CONSTANT
|
iiiiii|abcdefgh|iiiiii,特定值i
|
BORDER_REPLICATE
|
aaaaaa|abcdefgh|hhhhhh
|
BORDER_REFLECT
|
fedcba|abcdefgh|hgfedcb
|
BORDER_WRAP
|
cdefgh|abcdefgh|abcdefg
|
BORDER_REFLECT_101
|
gfedcb|abcdefgh|gfedcba
|
BORDER_TRANSPARENT
|
uvwxyz|abcdefgh|ijklmno
|
BORDER_REFLECT101
|
与BORDER_REFLECT_101相同
|
BORDER_DEFAULT
|
与BORDER_REFLECT_101相同
|
BORDER_ISOLATED
|
不考虑ROI(Region of interest,感兴趣区域)外区域
|
类型
|
说明
|
含义
|
操作
|
MORPH_ERODE | 腐蚀 |
腐蚀
|
erode(src)
|
MORPH_DILATE
|
膨胀
|
膨胀
|
dilate(src)
|
MORPH_OPEN
|
开运算
|
先腐蚀后膨胀
|
dilate(erode(src))
|
MORPH_CLOSE
|
闭运算
|
先膨胀后腐蚀
|
erode(dilate(src))
|
MORPH_GRADIENT
|
形态学梯度
|
膨胀图像减去腐蚀图像
|
dilate(src)-erode(src)
|
MORPH_TOPHAT
|
顶帽
|
原图减去开运算
|
src-open(src)
|
MORPH_BLACKHAT
|
黑帽
|
闭运算减去原图
|
close(src)-src
|
MORPH_HITMISS
|
击中击不中
|
前景背景腐蚀运算的交集,仅支持CV_8UC1二进制图
|
Intersection(erode(src),erode(src1))
|
//调用getStructuringElement函数
Mat element = getStructuringElement(MORPH_CROSS,Size(2 * 3+ 1, 2 * 3+ 1),Point(3, 3));
//调用morphologyEx函数-MORPH_OPEN->开运算
morphologyEx(m_srcImage, m_dstImage, MORPH_OPEN, element);
/*******形态学**********/
//形态学
void DlgImageProcessing::on_comboBoxMorphology_currentIndexChanged(int value)
{
if (m_srcImage.data)
{
QString qsType = ui.comboBoxMorphType->currentText();
//定义类型
int MorphologyType = -1;
if (qsType == "MORPH_RECT")
{
MorphologyType = MORPH_RECT;
}
else if (qsType == "MORPH_CROSS")
{
MorphologyType = MORPH_CROSS;
}
else if (qsType == "MORPH_ELLIPSE")
{
MorphologyType = MORPH_ELLIPSE;
}
else
{
MorphologyType = MORPH_RECT;
}
//定义大小
int MorphlogySize = ui.comboBoxMorphSize->currentText().toInt();
//调用getStructuringElement函数
Mat element = getStructuringElement(MorphologyType, Size(2 * MorphlogySize + 1, 2 * MorphlogySize + 1), Point(MorphlogySize, MorphlogySize));
Mat dstImage;
if (0 == value)
{
//调用腐蚀函数erode
//erode(m_srcImage, dstImage, element);
//也可以调用morphologyEx函数-MORPH_ERODE->腐蚀
morphologyEx(m_srcImage, dstImage, MORPH_ERODE, element);
}
else if (1 == value)
{
//调用膨胀函数dilate
//dilate(m_srcImage, dstImage, element);
//也可以调用morphologyEx函数-MORPH_DILATE->膨胀
morphologyEx(m_srcImage, dstImage, MORPH_DILATE, element);
}
else if (2 == value)
{
//调用morphologyEx函数-MORPH_OPEN->开运算
morphologyEx(m_srcImage, dstImage, MORPH_OPEN, element);
}
else if (3 == value)
{
//调用morphologyEx函数-MORPH_CLOSE->闭运算
morphologyEx(m_srcImage, dstImage, MORPH_CLOSE, element);
}
else if (4 == value)
{
//调用morphologyEx函数-MORPH_GRADIENT->Grandient运算
morphologyEx(m_srcImage, dstImage, MORPH_GRADIENT, element);
}
else if (5 == value)
{
//调用morphologyEx函数-MORPH_TOPHAT->顶帽变换
morphologyEx(m_srcImage, dstImage, MORPH_TOPHAT, element);
}
else if (6 == value)
{
//调用morphologyEx函数-MORPH_BLACKHAT->黑帽变换
morphologyEx(m_srcImage, dstImage, MORPH_BLACKHAT, element);
}
cv::imshow("this result", dstImage);
emit ShowImage(dstImage);
}
else
{
QMessageBox::warning(this, "提示", "没图片");
}
}
原图
腐蚀
膨胀
开运算
闭运算
morphology
顶帽
黑帽
1、CSDN地址:
Qt学视觉_CSDN博客-Qt学视觉-OpenCV,特征提取与检测领域博主Qt学视觉擅长Qt学视觉-OpenCV,特征提取与检测,等方面的知识,Qt学视觉关注c++,qt,visualstudio,opencv领域.https://blog.csdn.net/u013480226?spm=1010.2135.3001.5421
2、知乎
欢迎关注我的知乎专题Qt学视觉 - 知乎使用qt所写的视觉软件https://www.zhihu.com/column/c_1237691650757353472
3、微信公众号《Qt学视觉》
欢迎关注