学习,温故而知新。我写的东西都是给自己看的。方便平时忘记了,直接查看博客知道答案。
下面是常用的函数:
大家平时想学习图像处理,可以去看那本opencv蝴蝶书。
下面给两个学习opencv网址(C++的)
W3CschoolOpenCV官方文档
下面是详细函数使用网址:
创建Mat
二值化阈值处理
膨胀腐蚀
形态学其他操作
查找轮廓
绘制矩形框
imwrite图片保存质量
均值滤波和中值滤波
c++写法:
Mat img = imread("../2.png");
Mat pic1= Mat(cv::Size(100, 200), CV_8UC3, cv::Scalar(0, 255, 0));//Mat 函数使用
Mat gray,th,deal;
cvtColor(img, gray, CV_BGR2GRAY);//灰度图像
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));//结构元素。内核的形状,尺寸
threshold(th, th, 0, 255, THRESH_BINARY); //二值化阈值处理。取值范围。阈值类型
adaptiveThreshold(gray, th, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 25, 10);//自适应二值化阈值处理
//形态学处理
erode(th, th, kernel); //腐蚀。缩小轮廓(黑底白轮廓)
dilate(th, th, kernel); //膨胀。扩大轮廓(黑底白轮廓)
morphologyEx(th, th, MORPH_OPEN, kernel);//开操作
morphologyEx(th, th, MORPH_CLOSE, kernel);//闭操作
medianBlur(th,th,3);//中值滤波
//提取轮廓
vector<vector<Point>>cnts;
vector<Vec4i>hierarchy;
//检测所有外轮廓, 找出轮廓点
//填充内部小轮廓
findContours(th, cnts, hierarchy, CV_RETR_LIST, CHAIN_APPROX_SIMPLE);//
for (int i = 0; i < cnts.size(); i++)// 像素点个数 i是轮廓的数量
{
Rect xywh = boundingRect(cnts[i]);//计算轮廓的左上的坐标和长宽信息
double area = contourArea(cnts[i]);//计算轮廓的面积
if(area > 50)
{
drawContours(deal, cnts, i, Scalar(0, 0, 0), 2);//绘制轮廓
drawContours(deal, cnts, i, Scalar(0, 0, 0), CV_FILLED);//绘制填充轮廓
line(frame, Point(100, 0), Point(100, 200), Scalar(255, 0, 0), 2);//绘制线条
rectangle(deal, xywh, Scalar(0, 255, 0), 2); //绘制矩形框
rectangle(deal, xywh, Scalar(0, 0, 0), CV_FILLED); //绘制填充矩形框
//绘制文字
putText(frame, "area:" + to_string((int)area), Point(xywh.x + 10, xywh.y + 30),
CV_FONT_NORMAL, FONT_HERSHEY_PLAIN, Scalar(0, 0, 255), 2);
}
}
hconcat(pic1, pic2, pic2);//水平拼接图片
cv::imwrite("savepic/" + to_string(num) + ".jpg", jietu);// 保存图像至本地
python写法:
在这里插入代码片
先写到这
持续更新,加油!