1、转化为灰度图
我们可以通过opencv自带的split函数,将一个3通道的rgb图像转换成3个单通道图像,通过通道相减的方式获得灰度图。效果如下:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("/Users/milkman/Desktop/1.jpg" ,1);
cvtColor(img ,img, COLOR_BGR2GRAY, 0);
imshow("test", img);
waitKey(0);
return 0;
}
2、二值化(阈值化)操作
threshold(img, img, 200, 255, THRESH_BINARY);
效果如下
3、开闭运算
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("/Users/milkman/Desktop/1.jpg" ,1);
Mat element;
element = getStructuringElement(MORPH_RECT, Size(15, 15));
cvtColor(img ,img, COLOR_BGR2GRAY, 0);
threshold(img, img, 200, 255, THRESH_BINARY);
morphologyEx(img ,img , MORPH_OPEN, element);
imshow("test", img);
waitKey(0);
return 0;
}
效果如下
需要注意的是,
getStructuringElement()这个函数的参数含义,第一个是内核的形状,第二个是内核的尺寸
闭运算就是将morphologyEx()这个函数的第三个参数改成MORPH_CLOSE