OpenCv-色彩域
原创
mb62b85d3e5336e博主文章分类:opencv色彩 ©著作权
文章标签 ide xml 人脸检测 文章分类 Python 后端开发
©著作权归作者所有:来自51CTO博客作者mb62b85d3e5336e的原创作品,请联系作者获取转载授权,否则将追究法律责任
常见色彩空间
- RGB
- HSV
- HIS
- YCrCb
- YUV
色彩空间转换
-
最常见的两个
-
HSV与RGB
- YUV与RGB
代码练习3(颜色空间转换,通道分割,色彩追踪):
import cv2 as cvimport numpy as npimage_path = "datasources/images/1 (1).jpg"vido_path = "E:\\视频剪辑素材\\yizhan.mp4"def replace_color(image): src = cv.imread(image) HSV = cv.cvtColor(src, cv.COLOR_BGR2HSV) cv.imshow("HSV", HSV) HLS = cv.cvtColor(src, cv.COLOR_BGR2HLS) cv.imshow("HIS", HLS) YCrCb = cv.cvtColor(src, cv.COLOR_BGR2YCrCb) cv.imshow("YCrCb", YCrCb) YUV = cv.cvtColor(src, cv.COLOR_BGR2YUV) cv.imshow("YUV", YUV) cv.waitKey(0) cv.destroyAllWindows()def colcor_track(vido): caputer = cv.VideoCapture(vido) while(True): ret, frame = caputer.read() if ret==False: break hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) hmain = np.array([35, 43, 46]) hmax = np.array([77, 255, 255]) msk = cv.inRange(hsv, hmain, hmax) cv.imshow("yizhan_video", frame) cv.imshow("mask_vedo", msk) c = cv.waitKey(40) if c==27: breakdef split_iamge(image): src = cv.imread(image, 1) b, g, r = cv.split(src) cv.imshow("b", b) cv.imshow("g", g) cv.imshow("r", r) src[:, :, 0] = 255 cv.imshow("change_channels2", src) new_image = cv.merge([b, g, r]) cv.imshow("new_imge", new_image) cv.waitKey(0) cv.destroyAllWindows()if __name__ =="__main__": split_iamge(image_path)
人脸检测
import cv2 as cvimport numpy as npimport osimage_path = "../personimage/AFLW/0004-image64929.jpg"xml_path = "../opencvcore/opencv/data/haarcascades/haarcascade_frontalface_alt_tree.xml"video_path = "E:\\视频剪辑素材\\lzlh.ts"def person_face_detect(image, xml): src = cv.imread(image) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.namedWindow("result", cv.WINDOW_AUTOSIZE) cv.imshow('input image', src) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) face_detector = cv.CascadeClassifier(xml) faces = face_detector.detectMultiScale(gray, 1.02, 5) for x, y, w, h in faces: cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 2) cv.imshow("result", src) cv.waitKey(0) cv.destroyAllWindows()def face_interfac(src, xml): cv.namedWindow("result", cv.WINDOW_AUTOSIZE) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) face_detector = cv.CascadeClassifier(xml) faces = face_detector.detectMultiScale(gray, 1.02, 5) for x, y, w, h in faces: cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 2) cv.imshow("result", src)def person_face_video(): caputer = cv.VideoCapture(video_path) while(True): ret, frame = caputer.read() if ret==False: break face_interfac(frame, xml_path) if cv.waitKey(1)==0: breakif __name__ == "__main__": person_face_detect(image_path, xml_path)
验证码识别(tesseract-OCR+pytesseract )
import cv2 as cvfrom PIL import Imageimport pytesseractimage_path = "datasources/yzm/a510513a-7bc6-4217-bfb3-ad3c197c0e3d.png"def recognize_text(): src = cv.imread(image_path, 1) cv.imshow("原来", src) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 2)) binl = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel) kernel = cv.getStructuringElement(cv.MORPH_RECT, (2, 1)) open_out = cv.morphologyEx(binl, cv.MORPH_OPEN, kernel) cv.bitwise_not(open_out, open_out) cv.imshow("转换", open_out) textImage = Image.fromarray(open_out) text = pytesseract.image_to_string(textImage) print("This OK:%s"%text) cv.waitKey(0) cv.destroyAllWindows()if __name__ == "__main__": recognize_text()
- 总结(全):
基本完成,边缘提取分三个步骤(1.图像降噪2.计算图像梯度3.非极大值抑制4.阈值筛选),膨胀和腐蚀可以降低image的噪声,这里的人脸检测其实就是将人脸图像二值化,调用haarcascades的级联检测器实现的,验证码也是通过二值化然后使用Google的pytesseract +ocr实现的。重点: Canny边缘提取、人脸检测,验证码识别难点: 膨胀与腐蚀
- 赞
- 收藏
- 评论
- *举报
Original: https://blog.51cto.com/u_15698642/5418954
Author: mb62b85d3e5336e
Title: OpenCv-色彩域
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/513709/
转载文章受原作者版权保护。转载请注明原作者出处!