code
int main(int argc, int argv)
{
Mat SrcImage = imread(".//01-3.jpg");
//第一步:灰度化
Mat gray;
if (SrcImage.channels() == 3)
{
cvtColor(SrcImage, gray, CV_BGR2GRAY);
}
else
{
gray = SrcImage;
}
Mat graysrc = gray.clone();
2.1 增加的膨胀代码 自定义核(20 10) 横向膨胀的大一些
//Mat kernel_gray = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
//dilate(gray, gray, kernel_gray);
//1.Sobel算子,x方向求梯度
//threshold(gray, gray, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);
Mat sobel_x;
Mat sobel_y;
Sobel(gray, sobel_x, CV_8U, 1, 0, 3);
Sobel(gray, sobel_y, CV_8U, 0, 1, 3);
cv::namedWindow("sobel_x", CV_WINDOW_NORMAL);//创建窗口
cvResizeWindow("sobel_x", 800, 800); //创建一个500*500大小的窗口
imshow("sobel_x", sobel_x);
cv::namedWindow("sobel_y", CV_WINDOW_NORMAL);//创建窗口
cvResizeWindow("sobel_y", 800, 800); //创建一个500*500大小的窗口
imshow("sobel_y", sobel_y);
Mat img_sobel;
addWeighted(sobel_x, 0.5, sobel_y, 0.5,1.0, img_sobel);
//2.1 增加的膨胀代码 自定义核(20 10) 横向膨胀的大一些
Mat kernel_mean = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
dilate(img_sobel, img_sobel, kernel_mean);
// 设置中值滤波窗大小
const int winSize = 21;
// 中值滤波
cv::medianBlur(img_sobel, gray, winSize);
cv::namedWindow("medianBlur", CV_WINDOW_NORMAL);//创建窗口
cvResizeWindow("medianBlur", 800, 800); //创建一个500*500大小的窗口
imshow("medianBlur", gray);
//第二步:OTSU阈值分割
threshold(gray, gray, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);
//2.1 增加的膨胀代码 自定义核(20 10) 横向膨胀的大一些
Mat kernel_gray = getStructuringElement(MORPH_RECT, Size(30, 5), Point(-1, -1));
dilate(gray, gray, kernel_gray);
cv::namedWindow("gray", CV_WINDOW_NORMAL);//创建窗口
cvResizeWindow("gray", 800, 800); //创建一个500*500大小的窗口
imshow("gray", gray);
}
I hope I can help you,If you have any questions, please comment on this blog or send me a private message. I will reply in my free time.