C/C++,Qt,Python,OpenCV小项目实战-实时桌面颜色查询
生活随笔
收集整理的這篇文章主要介紹了
C/C++,Qt,Python,OpenCV小项目实战-实时桌面颜色查询
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
源碼連接如下(含Qt,VS,Python)
https://download.csdn.net/download/qq78442761/10723417
?
程序運行截圖如下:
(原理)邏輯如下:
1.使用VS2012以及OpenCV3,編寫識別顏色的算法,傳入一個圖像(只有一個像素(鼠標(biāo)當(dāng)前像素)),識別這個像素是什么顏色(識別原理在此不說,原理在這篇連接里面https://blog.csdn.net/qq78442761/article/details/83056346),把程序做成C接口的dll。
2.使用Python調(diào)用算法dll,并且接收返回過來的值
3.使用Qt截取當(dāng)前鼠標(biāo)的像素點,調(diào)用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_Hmain.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); }?
總結(jié)
以上是生活随笔為你收集整理的C/C++,Qt,Python,OpenCV小项目实战-实时桌面颜色查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-在Graphics上写文本
- 下一篇: C++工作笔记-模版类要注意的地方(对比