案例背景:将答题卡中的直线提取出来
方案思路:二值化后利用霍夫直线检测,效果特别差;canny边缘检测后利用霍夫直线检测效果也很差,有些线检测不出来。这里采用的方法是基于形态学的直线提取,再利用霍夫直线检测。
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(int arc, char** argv) {
Mat src = imread("1.jpg");
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
cvtColor(src, src, CV_BGR2GRAY);
Mat binaryImg, morphImg;
Rect roi = Rect(10, 10, src.cols - 20, src.rows - 20);
Mat roiImg = src(roi);
threshold(roiImg, binaryImg, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
imshow("binaryImg", binaryImg);
//定义水平直线结构元素,开操作进行水平直线的提取
Mat kernel = getStructuringElement(MORPH_RECT, Size(30, 1), Point(-1, -1));
morphologyEx(binaryImg, morphImg, MORPH_OPEN, kernel);
imshow(&#