OpenCV

您所在的位置:网站首页 designmodeler建模中直线如何保持竖直和水平 OpenCV

OpenCV

2024-07-15 06:03| 来源: 网络整理| 查看: 265

1.原理

图像形态学操作时候,可以通过自定义的结构元素实现结构元素 对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏 感的对象改变而不敏感的对象保留输出。通过使用两个最基本的 形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像 的操作、得到想要的结果。

-膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 膨胀 -腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值 腐蚀

常见的形状:矩形、园、直线、磁盘形状、砖石形状等各种自定义形状。

2.步骤

1.输入图像彩色图像 imread 2.转换为灰度图像 – cvtColor 3.转换为二值图像 – adaptiveThreshold 4.定义结构元素 5.开操作 (腐蚀+膨胀)提取 水平与垂直线

3.完整代码

(本人的运行环境是:vs2017+OpenCV3.4)

#include #include #include using namespace std; using namespace cv; //灰度化图像 Mat gray_Img(Mat src) { Mat dst = Mat::zeros(src.size(), src.type()); cvtColor(src, dst, CV_BGR2GRAY); return dst; } //自适应阈值(二值化图像) Mat threshold_Img(Mat src) { Mat dst = Mat::zeros(src.size(), src.type()); //参数:输入, 输出, 二值图像的最大值 , 在一个邻域内计算阈值所采用的算法,有两个取值分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C , 阈值类型只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV,(blockSize)adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大就由这个值作决定, 偏移值调整量 adaptiveThreshold(~src, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); return dst; } //结构元素(获取垂直算子) Mat get_Vertical(Mat src) { Mat dst = Mat::zeros(src.size(), src.type()); return getStructuringElement(MORPH_RECT,Size(src.cols/16,1),Point(-1,-1)); } //结构元素(获取水平算子) Mat get_Horizontal(Mat src) { Mat dst = Mat::zeros(src.size(), src.type()); return getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1)); } //腐蚀 Mat erode_Img(Mat src,Mat kernel) { Mat dst = Mat::zeros(src.size(), src.type()); erode(src, dst, kernel); return dst; } //膨胀 Mat dilate_Img(Mat src, Mat kernel) { Mat dst = Mat::zeros(src.size(), src.type()); dilate(src, dst, kernel); return dst; } int main() { Mat src = imread("001.png"); if (src.empty()) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3