源码连接如下(含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小项目实战-实时桌面颜色查询相关推荐

  1. Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二)

    目录 上一篇博文 程序的下载地址以及源码 获取颜色及生成图片 判断颜色 生成转换后的图片 上一篇博文 Qt + Python + OpenCV图标替换工具 之 项目介绍(一) https://blog ...

  2. 10 个开源 Python OpenCV 小项目,YouTube热门

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自 | 新机器视觉 1. Drowsiness Detect ...

  3. Qt + Python + OpenCV图标替换工具 之 项目介绍(一)

    目录 程序的下载地址以及源码 简介以及程序逻辑 程序运行 下一节 程序的下载地址以及源码 源码已经打包: 运行版本(release版本(编译好)下载地址如下): https://download.cs ...

  4. Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)

    目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...

  5. python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)

    python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源) 见链接

  6. 【课题总结】OpenCV 抠图项目实战(11)算法实验平台

    Python 小白的课题报告-OpenCV 抠图项目实战(11)抠图算法实验平台 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能 ...

  7. 【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用

    Python 小白的课题报告-OpenCV 抠图项目实战(10)PyQt5 使用 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能 ...

  8. 【课题总结】OpenCV 抠图项目实战(7)边缘检测

    Python 小白的课题报告-OpenCV 抠图项目实战(7) 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能算是 OpenCV ...

  9. 【课题总结】OpenCV 抠图项目实战(12)源程序代码

    Python 小白的课题报告-OpenCV 抠图项目实战(12)源程序代码 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能算是 ...

最新文章

  1. AngularJS2 + ASP.NET MVC项目
  2. python免费自学网站-python免费么
  3. Python基础:对象的深拷贝和浅拷贝的区别
  4. idea添加scala环境_idea怎么在线安装scala并且启动'
  5. java 循环stringbuffer_java常用类-----StringBuilder和StringBuffer的用法
  6. 内核模块编程之_初窥门径【ZT】
  7. 谁是面向对象设计中的霸主?(中)
  8. linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
  9. 在flex4中使用asdoc生成api文档
  10. 乐高积木格斗机器人组装拼图_玩积木、组装机器人的多重好处,你一定想不到!(认识机器人)...
  11. 用canvas画一个刮刮卡
  12. python调整PPT文档样式
  13. 【四足机器人--支撑相足端反作用力预测】(5)ConvexMPCLocomotion代码解析
  14. word文字上下间距怎么调_word上下文字间距 word字体上下间距怎么调整
  15. ToB和ToC端产品分别指什么
  16. 美团点评 2019校园招聘 后台开发方向
  17. 远程车控怎么玩?来,我教你..
  18. prompt learning
  19. 用广发卡自动分期买苹果还是华为?
  20. petalinux 的rootfs文件系统放在SD 分区上

热门文章

  1. Centos 的安装(2)
  2. 金山安全报告:二月漏洞频出 网站挂马猖獗
  3. C语言成为大学必修课!想要不挂科?你只需要这样做
  4. Ubuntu下Apache反向代理设置
  5. 企业数字化转型:数字化江湖的六大门派
  6. 数据治理项目失败,90%都是被这29条骚操作搞垮的
  7. 流露人间的情回忆儿童节
  8. 飞秋 包括《java就业培训课程》
  9. 飞鸽传书举一个小例子
  10. 学好 Web 前端的 6 点建议