📜  开幕| C++中OpenCV的形态转换(1)

📅  最后修改于: 2023-12-03 15:25:33.151000             🧑  作者: Mango

开幕| C++中OpenCV的形态转换

在计算机视觉领域中,形态转换是一种用于改变目标图像形状的方法。OpenCV提供了许多形态转换函数,包括腐蚀、膨胀、开运算、闭运算等。这些函数常用于去除图像上的噪声、填充空洞、分离不同的物体等操作,被广泛应用于图像处理、图像分割等领域。

腐蚀

腐蚀操作可以将图像中的边界腐蚀掉,使物体变小,减少噪声的影响。在OpenCV中,可以使用cv::erode()函数进行腐蚀操作。

cv::Mat src = cv::imread("image.png");   // 读取图像
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5,5));  // 定义结构元素
cv::Mat dst;
cv::erode(src, dst, kernel);  // 腐蚀操作
cv::imwrite("eroded.png", dst);   // 保存结果

其中cv::getStructuringElement()函数用于生成结构元素,cv::MORPH_RECT参数表示矩形结构元素,cv::Size(5,5)表示结构元素的大小。

膨胀

膨胀操作与腐蚀操作相反,可以将图像中的边界扩张,使物体变大。在OpenCV中,可以使用cv::dilate()函数进行膨胀操作。

cv::Mat src = cv::imread("image.png");   // 读取图像
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5,5));  // 定义结构元素
cv::Mat dst;
cv::dilate(src, dst, kernel);  // 膨胀操作
cv::imwrite("dilated.png", dst);   // 保存结果
开运算

开运算是腐蚀操作和膨胀操作的结合,先进行腐蚀操作再进行膨胀操作。它可以去除图像中的小噪点、填充空洞、分离连接的物体等。在OpenCV中,可以使用cv::morphologyEx()函数进行开运算操作。

cv::Mat src = cv::imread("image.png");   // 读取图像
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5,5));  // 定义结构元素
cv::Mat dst;
cv::morphologyEx(src, dst, cv::MORPH_OPEN, kernel);  // 进行开运算操作
cv::imwrite("opened.png", dst);   // 保存结果

其中cv::MORPH_OPEN参数表示开运算操作。

闭运算

闭运算是膨胀操作和腐蚀操作的结合,先进行膨胀操作再进行腐蚀操作。它可以填充图像中的小孔洞、连接分离的物体等。在OpenCV中,可以使用cv::morphologyEx()函数进行闭运算操作。

cv::Mat src = cv::imread("image.png");   // 读取图像
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5,5));  // 定义结构元素
cv::Mat dst;
cv::morphologyEx(src, dst, cv::MORPH_CLOSE, kernel);  // 进行闭运算操作
cv::imwrite("closed.png", dst);   // 保存结果

其中cv::MORPH_CLOSE参数表示闭运算操作。

以上就是C++中OpenCV的形态转换的介绍和代码示例。通过这些操作可以对图像进行预处理、分割等操作,为后续的图像处理、分析打下基础。