學習,溫故而知新。我寫的東西都是給自己看的。方便平時忘記了,直接查看博客知道答案。
下面是常用的函數:
大家平時想學習圖像處理,可以去看那本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寫法:
在這裏插入代碼片
先寫到這
持續更新,加油!