OpenCV实现图形颜色变换的Virtual Sketch库

需积分: 0 0 下载量 61 浏览量 更新于2024-12-04 收藏 1.92MB ZIP 举报
资源摘要信息:"CV-SHAPE-COLOR-DETECTION" 1. 项目概述 Virtual Sketch项目旨在创建一个可以通过OpenCV实现的手势控制图形界面。该项目通过形状检测和颜色检测功能,允许用户使用手部动作来控制界面中的图形元素。这个项目是一个Python库,并使用了OpenCV这个计算机视觉库,以实现对用户手势的识别和处理。 2. 核心技术 - OpenCV:这是一个开源的计算机视觉和机器学习软件库。它具有众多的通用算法,能够帮助开发者快速地实现图像处理、视频分析和高级任务,比如手势识别。 - Python:一种广泛使用的高级编程语言,以其易读性和简洁的语法而著名。在本项目中,Python作为主要开发语言,用于编写项目代码和创建用户交互界面。 - RGB颜色模型:在该项目中,颜色检测功能特别使用RGB(红绿蓝)模型来更改草图的颜色。RGB模型是一种颜色模型,它通过调整红色、绿色和蓝色三种颜色的强度来形成所有其它颜色。 3. 安装与使用 - 要求:用户设备上需要安装有Python 3和pip。操作系统可以是任何支持这些工具的独立系统。 - 安装:通过在终端或命令提示符中运行"pip install virtualsketch"命令来安装Virtual Sketch库。 - 使用:安装完毕后,用户可以启动绘图选项卡,使用手部动作进行绘图或涂鸦。 4. 库的开放性与贡献 该项目由麻省理工学院许可证授权,因此用户可以免费使用、派生、修改和分发该项目。如果用户喜欢这个项目,可以通过给项目点赞或者进行贡献来表达支持。 5. 文件结构 - 从文件名"CV-SHAPE-COLOR-DETECTION-main"中可以推断,这是一个包含该项目主要代码和资源的压缩包文件。文件结构将按照标准的项目布局来安排,包括源代码文件、文档、示例代码和配置文件等。 6. 项目目标与应用 Virtual Sketch项目的目标是创建一个能够通过手势进行控制的交互式草图工具,这在许多领域有着广泛的应用,例如: - 数字艺术和设计:允许艺术家和设计师通过自然的手势进行创作。 - 教育:提供一个有趣和互动的方式来教授绘画和颜色理论。 - 交互式展示:在博物馆、展览会上通过非传统的互动方式吸引观众。 - 手势控制界面:为计算机用户界面增添新的控制方式,特别是在视觉艺术和游戏设计中。 7. 社区与支持 由于该项目是开源的,因此用户可以参与到项目社区中去,贡献代码,改进功能,或者提出问题和建议。开源社区的参与能够加速项目的成长和完善,为用户带来更好的体验。 8. 未来展望 随着技术的发展,该项目可能会添加更多功能,例如更高级的手势识别,或者是更丰富的绘图工具等。同时,该项目也可能在更多平台上实现兼容,使得不同设备的用户都能体验到Virtual Sketch所带来的乐趣。 总结来说,CV-SHAPE-COLOR-DETECTION项目基于Python和OpenCV,提供了一个创新的手势控制绘图工具,通过形状和颜色识别功能,用户能够以全新的方式与计算机进行互动。该项目易于安装和使用,开放性好,具有广阔的社区支持和应用前景。

import cv2 import numpy as np # 提取图像的HOG特征 def get_hog_features(image): hog = cv2.HOGDescriptor() hog_features = hog.compute(image) return hog_features # 加载训练数据集 train_data = [r"I:\18Breakageratecalculation\SVM run\detection_cut\whole\train128"] train_labels = [r"I:\18Breakageratecalculation\SVM run\detection_cut\whole\train128\labels.txt"] for i in range(num_samples): image = cv2.imread('image_'+str(i)+'.jpg', 0) hog_features = get_hog_features(image) hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) color_hist = cv2.calcHist([hsv_image], [0, 1], None, [180, 256], [0, 180, 0, 256]) color_features = cv2.normalize(color_hist, color_hist).flatten() train_data.append(hog_features) train_labels.append(labels[i]) # 训练SVM模型 svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) svm.train(np.array(train_data), cv2.ml.ROW_SAMPLE, np.array(train_labels)) # 对测试图像进行分类 test_image = cv2.imread('I:\18Breakageratecalculation\mask-slic use\maskSLIC-master\result\split\result2\maskslic2_roi.png', 0) test_features = get_hog_features(test_image) result = svm.predict(test_features.reshape(1,-1)) # 显示分割结果 result_image = np.zeros(test_image.shape, np.uint8) for i in range(test_image.shape[0]): for j in range(test_image.shape[1]): if result[i,j] == 1: result_image[i,j] = 255 cv2.imshow('I:\18Breakageratecalculation\mask-slic use\maskSLIC-master\result\split\result2\Result.png', result_image) cv2.waitKey(0) cv2.destroyAllWindows()

2023-06-09 上传

import cv2 import numpy as np import os # 提取图像的HOG特征 def get_hog_features(image): hog = cv2.HOGDescriptor() hog_features = hog.compute(image) return hog_features # 加载训练数据集 train_data = [r"I:\18Breakageratecalculation\SVM run\detection_cut\whole\train128"] train_labels = [r"I:\18Breakageratecalculation\SVM run\detection_cut\whole\train128\labels.txt"] num_samples = 681 for i in range(num_samples): img = cv2.imread(str(i).zfill(3)+'.jpg') hog_features = get_hog_features(image) hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) color_hist = cv2.calcHist([hsv_image], [0, 1], None, [180, 256], [0, 180, 0, 256]) color_features = cv2.normalize(color_hist, color_hist).flatten() train_data.append(hog_features) train_labels.append(labels[i]) # 训练SVM模型 svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) svm.train(np.array(train_data), cv2.ml.ROW_SAMPLE, np.array(train_labels)) # 对测试图像进行分类 test_image = cv2.imread('I:\18Breakageratecalculation\mask-slic use\maskSLIC-master\result\split\result2\maskslic2_roi.png', 0) test_features = get_hog_features(test_image) result = svm.predict(test_features.reshape(1,-1)) # 显示分割结果 result_image = np.zeros(test_image.shape, np.uint8) for i in range(test_image.shape[0]): for j in range(test_image.shape[1]): if result[i,j] == 1: result_image[i,j] = 255 cv2.imshow('I:\18Breakageratecalculation\mask-slic use\maskSLIC-master\result\split\result2\Result.png', result_image) cv2.waitKey(0) cv2.destroyAllWindows()

2023-06-09 上传

import cv2 import mediapipe as mp import time class FaceDetector(): def __init__(self, minDetectionCon=0.5): self.minDetectionCon = minDetectionCon self.mpFaceDetection = mp.solutions.face_detection self.mpDraw = mp.solutions.drawing_utils self.faceDetection = self.mpFaceDetection.FaceDetection(self.minDetectionCon) def findFaces(self, img, draw=True): imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) self.results = self.faceDetection.process(imgRGB) # print(self.results) bboxs = [] if self.results.detections: for id, detection in enumerate(self.results.detections): bboxC = detection.location_data.relative_bounding_box ih, iw, ic = img.shape bbox = int(bboxC.xmin * iw), int(bboxC.ymin * ih), \ int(bboxC.width * iw), int(bboxC.height * ih) bboxs.append([id, bbox, detection.score]) if draw: img = self.fancyDraw(img,bbox) cv2.putText(img, f'{int(detection.score[0] * 100)}%', (bbox[0], bbox[1] - 20), cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 255), 2) return img, bboxs def fancyDraw(self, img, bbox, l=30, t=5, rt= 1): x, y, w, h = bbox x1, y1 = x + w, y + h cv2.rectangle(img, bbox, (255, 0, 255), rt) # Top Left x,y cv2.line(img, (x, y), (x + l, y), (255, 0, 255), t) cv2.line(img, (x, y), (x, y+l), (255, 0, 255), t) # Top Right x1,y cv2.line(img, (x1, y), (x1 - l, y), (255, 0, 255), t) cv2.line(img, (x1, y), (x1, y+l), (255, 0, 255), t) # Bottom Left x,y1 cv2.line(img, (x, y1), (x + l, y1), (255, 0, 255), t) cv2.line(img, (x, y1), (x, y1 - l), (255, 0, 255), t) # Bottom Right x1,y1 cv2.line(img, (x1, y1), (x1 - l, y1), (255, 0, 255), t) cv2.line(img, (x1, y1), (x1, y1 - l), (255, 0, 255), t) return img def main(): cap = cv2.VideoCapture("Videos/6.mp4") pTime = 0 detector = FaceDetector() while True: success, img = cap.read() img, bboxs = detector.findFaces(img) print(bboxs) cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, f'FPS: {int(fps)}', (20, 70), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 2) cv2.imshow("Image", img) cv2.waitKey(1) if __name__ == "__main__": main() 给以上代码进行解析讲解,并告诉我代码的亮点和难点

2023-05-31 上传