3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
fanfuhan OpenCV 教學072 ~ opencv-072-二值圖像分析(缺陷檢測一) 資料來源: https://fanfuhan.github.io/ https://fanfuhan.github.io/2019/04/22/opencv-072/ GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV 缺陷檢測,分為兩個部分,一個部分是提取指定的輪廓,第二個部分通過對比實現划痕檢測與缺角檢測。與輪廓。 C++ #include #include using namespace std; using namespace cv; /* * 二值图像分析(缺陷检测一) */ int main() { Mat src = imread("../images/ce_02.jpg"); if (src.empty()) { cout << "could not load image.." << endl; } imshow("input", src); // 二值图像 Mat gray, binary; cvtColor(src, gray, COLOR_BGR2GRAY); threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU); // 开操作,去掉一些小块 Mat se = getStructuringElement(MORPH_RECT, Size(3, 3)); morphologyEx(binary, binary, MORPH_OPEN, se); // 绘制轮廓 vector> contours; vector hierarchy; findContours(binary, contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE); int height = src.rows; for (size_t t = 0; t < contours.size(); t++) { Rect rect = boundingRect(contours[t]); double area = contourArea(contours[t]); if (rect.height > (height / 2)) { continue; } if (area < 150) { continue; } // 绘制外接矩形 rectangle(src, rect, Scalar(0, 0, 255),2); // 绘制轮廓 drawContours(src, contours, t, Scalar(0, 255, 0), 2); } imshow("result", src); waitKey(0); return 0; } Python import cv2 as cv import numpy as np src = cv.imread("D:/images/ce_02.jpg") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) # 图像二值化 gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1)) binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se) cv.imshow("binary", binary) # 轮廓提取 contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE) height, width = src.shape[:2] for c in range(len(contours)): x, y, w, h = cv.boundingRect(contours[c]) area = cv.contourArea(contours[c]) if h > (height//2): continue if area < 150: continue cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0) cv.drawContours(src, contours, c, (0, 255, 0), 2, 8) cv.imshow("result", src) cv.imwrite("D:/binary2.png", src) cv.waitKey(0) cv.destroyAllWindows()

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦