C/C++,Qt,Python,OpenCV小项目实战-实时桌面颜色查询
源码连接如下(含Qt,VS,Python)
https://download.csdn.net/download/qq78442761/10723417
程序运行截图如下:
(原理)逻辑如下:
1.使用VS2012以及OpenCV3,编写识别颜色的算法,传入一个图像(只有一个像素(鼠标当前像素)),识别这个像素是什么颜色(识别原理在此不说,原理在这篇连接里面https://blog.csdn.net/qq78442761/article/details/83056346),把程序做成C接口的dll。
2.使用Python调用算法dll,并且接收返回过来的值
3.使用Qt截取当前鼠标的像素点,调用Python进行分析,并且获取返回值。
程序源码如下:
VS2012 OpenCV的重点代码:
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>using namespace cv;extern "C"__declspec(dllexport) char* getColorName(char *FileName){char *colorName;Mat matSrc=imread(FileName,IMREAD_UNCHANGED);Mat hsvSrc;cvtColor(matSrc,hsvSrc,COLOR_BGR2HSV);int HValue,SValue,VValue;HValue=(int)hsvSrc.at<uchar>(0,0);SValue=(int)hsvSrc.at<uchar>(0,1);VValue=(int)hsvSrc.at<uchar>(0,2);if((HValue>=0&&HValue<=180)&&(SValue>=0&&SValue<=255)&&(VValue>=0&&VValue<=46)){colorName="黑";}else if((HValue>=0&&HValue<=180)&&(SValue>=0&&SValue<=43)&&(VValue>=46&&VValue<=220)){colorName="灰";}else if((HValue>=0&&HValue<=180)&&(SValue>=0&&SValue<=30)&&(VValue>=221&&VValue<=255)){colorName="白";}else if(((HValue>=0&&HValue<=10)||(HValue>=156&&HValue<=180))&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="红";}else if((HValue>=11&&HValue<=25)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="橙";}else if((HValue>=26&&HValue<=34)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="黄";}else if((HValue>=35&&HValue<=77)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="绿";}else if((HValue>=78&&HValue<=99)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="青";}else if((HValue>=100&&HValue<=124)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="蓝";}else if((HValue>=125&&HValue<=155)&&(SValue>=43&&SValue<=255)&&(VValue>=46&&VValue<=255)){colorName="紫";}else{colorName="未知";}return colorName;
}
胶水Python的源码:
import ctypes
import sysif __name__=='__main__':fileName=str(sys.argv[1])ll=ctypes.cdll.LoadLibrary lib =ll("judgeColor.dll") charPointer=bytes(fileName,"gbk")result=lib.getColorName(charPointer)pyResult=ctypes.string_at(result);result=pyResult.decode("gbk")print(result)pass
Qt源码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void printMousePoint();protected:void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;private:Ui::Widget *ui;bool m_dragging;bool m_isRunning;QPoint m_startPosition;QPoint m_framePosition;
};#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"#include <QDebug>#include <QProcess>
#include <QTimer>
#include <QPixmap>
#include <QWindow>
#include <QMouseEvent>
#include <QEventLoop>
#include <QScreen>
#include <windows.h>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);setMouseTracking(true);QTimer *timer=new QTimer;connect(timer,SIGNAL(timeout()),this,SLOT(printMousePoint()));timer->start(20);setWindowFlags(Qt::WindowStaysOnTopHint|Qt::Window|Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);m_dragging=false;m_isRunning=false;
}Widget::~Widget()
{delete ui;
}void Widget::printMousePoint()
{POINT p;if(GetCursorPos(&p)&&!m_isRunning){QWindow *window=windowHandle();QScreen *screen=window->screen();QPixmap pixmap=screen->grabWindow(0,(int)p.x,(int)p.y,1,1);QString filePath=qApp->applicationDirPath()+"/1.png";pixmap.save(filePath);QProcess p(0);QString cmdString="python "+qApp->applicationDirPath()+"/demo.py "+qApp->applicationDirPath()+"/1.png";m_isRunning=true;p.start("cmd", QStringList()<<"/c"<<cmdString);//p.waitForStarted();//p.waitForFinished();QEventLoop loop;connect(&p,SIGNAL(finished(int,QProcess::ExitStatus)),&loop,SLOT(quit()));loop.exec();QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput());strTemp=strTemp.left(1);ui->label->setText(strTemp);m_isRunning=false;}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons()&Qt::LeftButton){if(m_dragging){QPoint delta=event->globalPos()-m_startPosition;move(m_framePosition+delta);}}QWidget::mouseMoveEvent(event);
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){m_dragging=true;m_startPosition=event->globalPos();m_framePosition=frameGeometry().topLeft();}QWidget::mousePressEvent(event);
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{m_dragging=false;QWidget::mouseReleaseEvent(event);
}
C/C++,Qt,Python,OpenCV小项目实战-实时桌面颜色查询相关推荐
- Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二)
目录 上一篇博文 程序的下载地址以及源码 获取颜色及生成图片 判断颜色 生成转换后的图片 上一篇博文 Qt + Python + OpenCV图标替换工具 之 项目介绍(一) https://blog ...
- 10 个开源 Python OpenCV 小项目,YouTube热门
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自 | 新机器视觉 1. Drowsiness Detect ...
- Qt + Python + OpenCV图标替换工具 之 项目介绍(一)
目录 程序的下载地址以及源码 简介以及程序逻辑 程序运行 下一节 程序的下载地址以及源码 源码已经打包: 运行版本(release版本(编译好)下载地址如下): https://download.cs ...
- Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)
目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...
- python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)
python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源) 见链接
- 【课题总结】OpenCV 抠图项目实战(11)算法实验平台
Python 小白的课题报告-OpenCV 抠图项目实战(11)抠图算法实验平台 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能 ...
- 【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用
Python 小白的课题报告-OpenCV 抠图项目实战(10)PyQt5 使用 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能 ...
- 【课题总结】OpenCV 抠图项目实战(7)边缘检测
Python 小白的课题报告-OpenCV 抠图项目实战(7) 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能算是 OpenCV ...
- 【课题总结】OpenCV 抠图项目实战(12)源程序代码
Python 小白的课题报告-OpenCV 抠图项目实战(12)源程序代码 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能算是 ...
最新文章
- AngularJS2 + ASP.NET MVC项目
- python免费自学网站-python免费么
- Python基础:对象的深拷贝和浅拷贝的区别
- idea添加scala环境_idea怎么在线安装scala并且启动'
- java 循环stringbuffer_java常用类-----StringBuilder和StringBuffer的用法
- 内核模块编程之_初窥门径【ZT】
- 谁是面向对象设计中的霸主?(中)
- linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
- 在flex4中使用asdoc生成api文档
- 乐高积木格斗机器人组装拼图_玩积木、组装机器人的多重好处,你一定想不到!(认识机器人)...
- 用canvas画一个刮刮卡
- python调整PPT文档样式
- 【四足机器人--支撑相足端反作用力预测】(5)ConvexMPCLocomotion代码解析
- word文字上下间距怎么调_word上下文字间距 word字体上下间距怎么调整
- ToB和ToC端产品分别指什么
- 美团点评 2019校园招聘 后台开发方向
- 远程车控怎么玩?来,我教你..
- prompt learning
- 用广发卡自动分期买苹果还是华为?
- petalinux 的rootfs文件系统放在SD 分区上