opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒
opencv,基本操作,腐蚀,膨胀,开运算,闭运算,顶冒,黑冒
本章内容:
1.腐蚀
2.膨胀
3.开运算
4.闭运算
5.顶冒
6.黑冒
1.腐蚀
输出结果
2.膨胀
输出结果
3.开运算
输出结果
4.闭运算
输出结果
5. 顶冒运算
输出结果
6.黑冒运算
输出结果
源代码
#include <ostream>
#include <opencv.hpp>int main(int argc, char *argv[])
{
/*
本章内容:
1.腐蚀
2.膨胀
3.开运算
4.闭运算
5.顶冒
6.黑冒*/
cv::String fileName = "/home/wang/dev/Image/cdut.jpeg";
cv::Mat src = cv::imread(fileName);
if(src.data == NULL){
printf("图像读入失败\n");
return -1;
}
/*1.腐蚀
api接口: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() );
参数分析:
@param kernel structuring element used for erosion; // 核大小
@param iterations number of times erosion is applied.//迭代次数
*/
cv::Mat dstErode;
cv::Mat kernelErode;
/* CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
参数:
shape:
MORPH_RECT = 0, //矩形核
MORPH_CROSS = 1, // 十字核
MORPH_ELLIPSE = 2 // 椭圆核
*/
kernelErode = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::erode(src, dstErode,kernelErode,cv::Point(-1,-1),4);
cv::imshow("src", src);
cv::imshow("src Erode", dstErode);
/*2.膨胀
api接口:CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );*/
cv::Mat dstDilate;
cv::Mat kernelDilate = cv::getStructuringElement(cv::MORPH_ELLIPSE,cv::Size(3,3));
cv::dilate(src,dstDilate,kernelDilate,cv::Point(-1,-1),2);
cv::imshow("src Dilate", dstDilate);
/* 3.开运算
api接口: CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,
int op, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
参数分析:
@param op Type of a morphological operation, see #MorphTypes // 运算符操作
enum cv::MorphTypes:
MORPH_ERODE = 0,
MORPH_DILATE = 1,
MORPH_OPEN = 2,
MORPH_CLOSE = 3,
MORPH_GRADIENT = 4,
MORPH_TOPHAT = 5,
MORPH_BLACKHAT = 6,
MORPH_HITMISS = 7
*/
cv::Mat dstOpen;
cv::Mat kernelOpen = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::morphologyEx(src, dstOpen, cv::MORPH_OPEN, kernelOpen,cv::Size(-1,-1),4);
cv::imshow("src open", dstOpen);
/* 4.闭运算
api接口:
*/
cv::Mat dstClose;
cv::Mat kernelClose = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::morphologyEx(src,dstClose,cv::MORPH_CLOSE,kernelClose,cv::Point(-1,-1),4);
cv::imshow("src close", dstClose);
/*5.顶冒运算
* 原图像 - 开运算
*/
cv::Mat dstTop;
cv::Mat dstTop1;
cv::Mat kernelTop = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::morphologyEx(src,dstTop,cv::MORPH_TOPHAT,kernelTop,cv::Point(-1,-1), 4);
cv::subtract(src,dstOpen,dstTop1);
cv::imshow("src tophat", dstTop);
cv::imshow("src - dialte", dstTop1);
/*6.黑猫运算
闭运算 - 原图像
*/
cv::Mat dstBlack;
cv::Mat dstBlack1;
cv::Mat kernelBlack = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::morphologyEx(src,dstBlack,cv::MORPH_BLACKHAT,kernelBlack,cv::Point(-1,-1), 4);
cv::subtract(dstClose,src,dstBlack1);
cv::imshow("src tophat", dstBlack);
cv::imshow("src - dialte", dstBlack1);cv::waitKey(0);
return 1;
}