OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)

1.结构元素
可以是任意形状的结构元素:矩形,圆,直线,磁盘形状,砖石形状等
2.提取步骤
输入图像彩色图像imread
转换为灰度图像cvtColor
转换为二值图像adaptiveThreshold
定义结构元素
开操作(腐蚀+膨胀)提取水平和垂直线
3.api
adaptiveThreshold-转化为二值图像(
Mat src(输入灰度图像),
Mat dest(二值图像),
double maxValue(二值图像最大值),
int adaptiveMethod(自适应方法)(ADAPTIVE_THRESH_MEAN_C/ADAPTIVE_THRESH_GAUSSIAN_C),
int thresholdType(阈值类型),
int blockSize(块大小),
double c(常量c可以是正数,0,负数)

直接提取api
morphologyEx(binimage, dst, CV_MOP_OPEN, hline);
4.实例
代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("F:/picture/去除干扰线.png");
	if (src.empty()) {
		printf("could not image");
		return -1;
	}
	Mat  gray_src;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	imshow("灰色", gray_src);

	//转换为二值图像
	Mat binimage;
	adaptiveThreshold(~gray_src, binimage, 255, ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 15, -2);
	imshow("二值", binimage);
	Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16,1), Point(-1, - 1));
	Mat yline = getStructuringElement(MORPH_RECT, Size(1, src.rows/16), Point(-1, -1));
	Mat sline = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1, -1));
	Mat temp;
	erode(binimage, temp, sline);
	dilate(temp, dst, sline);
	//morphologyEx(binimage, dst, CV_MOP_OPEN, hline);
	//blur(dst, dst, Size(3, 3), Point(-1, -1));
	bitwise_not(dst, dst);

	imshow("水平线", dst);	
	imshow("测试", src);
	waitKey(0);
	return 0;
}

效果如下:

这里写图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值