欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt物聯(lián)網(wǎng)管理平臺(tái)之實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā)

 更新時(shí)間:2022年07月15日 09:39:16   作者:feiyangqingyun  
系統(tǒng)在運(yùn)行過程中,會(huì)實(shí)時(shí)采集設(shè)備的數(shù)據(jù),當(dāng)采集到的數(shù)據(jù)發(fā)生報(bào)警后,可以將報(bào)警信息以短信的形式發(fā)送給指定的管理員。本文將利用Qt實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā),感興趣的可以嘗試一下

一、前言

系統(tǒng)在運(yùn)行過程中,會(huì)實(shí)時(shí)采集設(shè)備的數(shù)據(jù),當(dāng)采集到的數(shù)據(jù)發(fā)生報(bào)警后,可以將報(bào)警信息以短信的形式發(fā)送給指定的管理員(可以是多個(gè)),這樣管理員就算不在現(xiàn)場,也能第一時(shí)間知道哪里發(fā)生了報(bào)警,可以緊急趕往現(xiàn)場處置。很多時(shí)候軟件都是放在現(xiàn)場電腦上運(yùn)行的,未必現(xiàn)場有人員一直盯著看,通過短信的形式,第一時(shí)間送達(dá)關(guān)鍵人員那里,及時(shí)響應(yīng),不錯(cuò)過任何一次重大報(bào)警信息,可以在后臺(tái)設(shè)定過濾哪些設(shè)備產(chǎn)生的報(bào)警需要第一時(shí)間送達(dá),還可以設(shè)置短信發(fā)送的間隔,多個(gè)接收者。

發(fā)送短信在聯(lián)網(wǎng)的環(huán)境中,可以通過各種互聯(lián)網(wǎng)短信服務(wù)廠商來接入,在不聯(lián)網(wǎng)的環(huán)境中,只有一個(gè)辦法那就是通過插卡的短信設(shè)備來發(fā)送,有標(biāo)準(zhǔn)的AT協(xié)議,基本上硬件都提供了串口接口,所以程序上其實(shí)就是串口通信,通過收發(fā)協(xié)議數(shù)據(jù)來解析,比如發(fā)送 AT+CSCA? 命令表示查詢短信中心號(hào)碼,AT+CMGR=1 表示讀取序號(hào)=1的短信內(nèi)容。為了能夠支持各個(gè)廠家的設(shè)備,特意封裝的通用的短信類,支持長短信發(fā)送,支持多個(gè)收件人,多線程發(fā)送。

二、功能特點(diǎn)

2.1 軟件模塊

  • 設(shè)備監(jiān)控模塊,包括數(shù)據(jù)監(jiān)控(表格形式展示)、設(shè)備面板(面板形式展示)、地圖監(jiān)控(地圖形式展示)、曲線監(jiān)控(曲線形式展示)。
  • 數(shù)據(jù)查詢模塊,包括報(bào)警記錄、運(yùn)行記錄、操作記錄。
  • 系統(tǒng)設(shè)置模塊,包括基本設(shè)置、端口管理、控制器管理、探測(cè)器管理、報(bào)警聯(lián)動(dòng)、類型設(shè)置等。
  • 其他設(shè)置模塊,包括用戶管理、地圖管理、位置調(diào)整、組態(tài)設(shè)計(jì)、設(shè)備調(diào)試等。

2.2 基礎(chǔ)功能

  1. 設(shè)備數(shù)據(jù)采集,支持串口、網(wǎng)絡(luò),串口可設(shè)置串口號(hào)、波特率,網(wǎng)絡(luò)可設(shè)置IP地址、通訊端口。
  2. 每個(gè)端口支持采集周期時(shí)間,默認(rèn)1秒鐘一個(gè)設(shè)備。
  3. 支持設(shè)置通訊超時(shí)次數(shù),默認(rèn)3次。
  4. 支持最大重連時(shí)間,用于重新讀取離線的設(shè)備。
  5. 控制器信息,能夠添加控制器名稱,選擇控制器地址、控制器型號(hào),設(shè)置該控制器下面的探測(cè)器數(shù)量。
  6. 探測(cè)器信息,能夠添加位號(hào)、探測(cè)器型號(hào)、氣體種類、氣體符號(hào)、高報(bào)值、低報(bào)值、緩沖值、清零值、是否啟用、報(bào)警聲音、背景地圖、存儲(chǔ)周期、數(shù)值換算小數(shù)點(diǎn)位數(shù)、報(bào)警延時(shí)時(shí)間、報(bào)警的類型(HH,LL,HL)等。
  7. 類型管理可配置控制器型號(hào)、探測(cè)器型號(hào)、氣體種類、氣體符號(hào)等。
  8. 地圖支持導(dǎo)入和刪除,所有的探測(cè)器在地圖上的位置可自由拖動(dòng)保存。
  9. 端口信息、控制器信息、探測(cè)器信息、類型信息、用戶信息等,都支持導(dǎo)入、導(dǎo)出、導(dǎo)出到excel、打印。
  10. 運(yùn)行記錄、報(bào)警記錄、操作記錄,都支持多條件組合查詢,比如時(shí)間段、控制器、探測(cè)器等,所有記錄支持導(dǎo)出到excel/pdf和打印。
  11. 運(yùn)行記錄、報(bào)警記錄、操作記錄都可刪除指定時(shí)間范圍內(nèi)的數(shù)據(jù)。
  12. 系統(tǒng)設(shè)置可選擇對(duì)應(yīng)表最大保存記錄數(shù),自動(dòng)清理早期數(shù)據(jù),留出足夠的空間存儲(chǔ)重要的數(shù)據(jù)。
  13. 報(bào)警短信轉(zhuǎn)發(fā),支持多個(gè)接收手機(jī)號(hào)碼,可設(shè)定發(fā)送間隔,比如即時(shí)發(fā)送或者6個(gè)小時(shí)發(fā)送一次所有的報(bào)警信息,短信內(nèi)容過長,自動(dòng)拆分多條短信。
  14. 報(bào)警郵件轉(zhuǎn)發(fā),支持多個(gè)接收郵箱,可設(shè)定發(fā)送間隔,比如即時(shí)發(fā)送或者6個(gè)小時(shí)發(fā)送一次所有的報(bào)警信息,支持附件發(fā)送。
  15. 設(shè)置軟件的中文標(biāo)題、英文標(biāo)題、logo路徑、版權(quán)所有等。
  16. 開關(guān)設(shè)置開機(jī)運(yùn)行、報(bào)警聲音、自動(dòng)登錄、記住密碼等。
  17. 報(bào)警聲音可設(shè)置播放次數(shù),界面風(fēng)格樣式提供18套皮膚文件選擇。
  18. 用戶管理,包括用戶權(quán)限配置,不同用戶可以有不同模塊的權(quán)限。
  19. 用戶登錄和用戶退出,可以記住密碼和自動(dòng)登錄,超過三次報(bào)錯(cuò)提示并關(guān)閉程序。
  20. 四種監(jiān)控模式,設(shè)備面板監(jiān)控、地圖監(jiān)控、表格數(shù)據(jù)監(jiān)控、曲線數(shù)據(jù)監(jiān)控,可自由切換,四種模式下都實(shí)時(shí)展示采集到的數(shù)據(jù),報(bào)警閃爍等。
  21. 報(bào)警繼電器聯(lián)動(dòng),一個(gè)位號(hào)可以跨串口聯(lián)動(dòng)多個(gè)模塊和繼電器號(hào),支持多對(duì)多。

2.3 特色功能

  1. 通信協(xié)議支持modbus_com、modbus_tcp_rtu,后期拓展mqtt等協(xié)議。
  2. 數(shù)據(jù)源除了真實(shí)的硬件設(shè)備采集,還可選數(shù)據(jù)庫采集,這樣用戶可以安排其他程序員比如java程序員將前端采集好的數(shù)據(jù)放到數(shù)據(jù)庫,本系統(tǒng)直接從數(shù)據(jù)庫采集即可。數(shù)據(jù)庫采集模式可以作為通用的系統(tǒng)使用,更適合多人多系統(tǒng)協(xié)作。
  3. 智能跳過超時(shí)的設(shè)備,加快對(duì)在線設(shè)備的采集速度,當(dāng)設(shè)備數(shù)量很多的時(shí)候尤其有用。
  4. 對(duì)智能跳過的超時(shí)的設(shè)備,在設(shè)定的重連時(shí)間自動(dòng)采集一次,以便探測(cè)設(shè)備是否又重新上線。
  5. 每個(gè)探測(cè)器可控是否啟用,不啟用則不會(huì)采集,也不會(huì)在界面顯示,相當(dāng)于運(yùn)行階段臨時(shí)關(guān)閉。
  6. 探測(cè)器可設(shè)置緩沖值和報(bào)警延時(shí)時(shí)間,在該值附近波動(dòng)產(chǎn)生的報(bào)警,不計(jì)入報(bào)警,只有持續(xù)處于報(bào)警值且超過報(bào)警延時(shí)時(shí)間才算真正報(bào)警,這樣可以規(guī)避很多波動(dòng)導(dǎo)致的誤報(bào)。
  7. 探測(cè)器可設(shè)置存儲(chǔ)周期,按照設(shè)定的時(shí)間來存儲(chǔ)一條運(yùn)行記錄,可以按照重要程度對(duì)重要性高的設(shè)定存儲(chǔ)周期短一些,不重要的設(shè)定大一些,這樣可以節(jié)省不少的存儲(chǔ)空間,也保證了重要的數(shù)據(jù)及時(shí)存儲(chǔ)。
  8. 探測(cè)器可設(shè)置清零值,在一些高精度高靈敏的設(shè)備可能出廠的時(shí)候默認(rèn)值未必是0,需要設(shè)定清零值來表示初始值。
  9. 探測(cè)器可設(shè)置小數(shù)點(diǎn),用于計(jì)算后的真實(shí)數(shù)據(jù)控制小數(shù)點(diǎn)點(diǎn)位顯示,相當(dāng)于除以10、除以100、除以1000,這樣大部分的探測(cè)器數(shù)據(jù)直接通過小數(shù)點(diǎn)位設(shè)置控制真實(shí)換算后的值,極個(gè)別的需要特殊轉(zhuǎn)換的可以在通信協(xié)議中約定。
  10. 探測(cè)器報(bào)警的類型支持多種,有些設(shè)備是高于某個(gè)值高報(bào),低于某個(gè)值低報(bào),而有些設(shè)備是在最小值最大值范圍內(nèi)是高報(bào),低于最小值低報(bào),高于最大值正常。這樣可以分情況處理,涵蓋各種報(bào)警類型。
  11. 原創(chuàng)數(shù)據(jù)導(dǎo)入、導(dǎo)出、打印機(jī)制,跨平臺(tái)不依賴任何組件,瞬間導(dǎo)出數(shù)據(jù)。
  12. 導(dǎo)出到excel的記錄支持所有excel、wps等表格文件版本,不依賴excel等軟件。
  13. 高報(bào)顏色、低報(bào)顏色、正常顏色、默認(rèn)值顏色等,都可以自由設(shè)置。
  14. 支持云端數(shù)據(jù)同步,將本地采集到的數(shù)據(jù)實(shí)時(shí)同步到云端。
  15. 支持網(wǎng)絡(luò)轉(zhuǎn)發(fā)和網(wǎng)絡(luò)接收,網(wǎng)絡(luò)接收開啟后,軟件從udp接收數(shù)據(jù)進(jìn)行解析。網(wǎng)絡(luò)轉(zhuǎn)發(fā)支持多個(gè)目標(biāo)IP,這樣就實(shí)現(xiàn)了本地采集的軟件,自由將數(shù)據(jù)轉(zhuǎn)到客戶端,隨時(shí)查看采集到的數(shù)據(jù)。
  16. 自動(dòng)記住用戶最后停留的界面以及其他配置信息,重啟后自動(dòng)應(yīng)用。
  17. 報(bào)警自動(dòng)切換到對(duì)應(yīng)的地圖,探測(cè)器按鈕閃爍,表格數(shù)據(jù)對(duì)應(yīng)顏色顯示。
  18. 雙擊探測(cè)器圖標(biāo),彈出對(duì)應(yīng)探測(cè)器詳細(xì)信息,可以根據(jù)需要定制回控操作。
  19. 數(shù)據(jù)庫支持多種,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金倉等。
  20. 本地設(shè)備采集到的數(shù)據(jù)實(shí)時(shí)上傳到云端,以便手機(jī)APP或者web等其他方式提取。
  21. 自帶設(shè)備模擬工具,支持不同型號(hào)的多個(gè)設(shè)備數(shù)據(jù)模擬,同時(shí)還帶數(shù)據(jù)庫數(shù)據(jù)模擬,以便在沒有設(shè)備的時(shí)候測(cè)試數(shù)據(jù)。
  22. 標(biāo)準(zhǔn)modbus協(xié)議,各種控制器類型、探測(cè)器類型、種類、符號(hào)等全部自定義,非常靈活和強(qiáng)大,通信協(xié)議示例數(shù)據(jù)非常完整,通用各種modbus協(xié)議系統(tǒng),適用于各種應(yīng)用場景接入。
  23. 同時(shí)集成了串口通信、網(wǎng)絡(luò)通信、數(shù)據(jù)庫通信、數(shù)據(jù)導(dǎo)入導(dǎo)出打印、通信協(xié)議解析、界面UI、全局換膚等眾多組件和知識(shí)點(diǎn),非常適合新手入門和進(jìn)階。
  24. 支持xp、win7、win10、、win11、linux、mac、各種國產(chǎn)系統(tǒng)(UOS、中標(biāo)麒麟、銀河麒麟等)、嵌入式linux等系統(tǒng)。
  25. 注釋完整,項(xiàng)目結(jié)構(gòu)清晰,超級(jí)詳細(xì)完整的使用開發(fā)手冊(cè),精確到每個(gè)代碼文件的功能說明,不斷持續(xù)迭代版本。

國內(nèi)站點(diǎn):https://gitee.com/feiyangqingyun

國際站點(diǎn):https://github.com/feiyangqingyun

體驗(yàn)地址:https://pan.baidu.com/s/1foas7ytSXh7gHOTDqDREjQ 提取碼:axip 文件名:bin_iotsystem.zip。

四、效果圖

五、相關(guān)代碼

void SendMsgThread::readMsg()
{
    isRead = false;
    QString data = com->readAll();
    data.replace(" ", "");
    data.replace("\r", "");
    data.replace("\n", "");
    if (data.length() <= 0) {
        return;
    }

    //從SIM卡上讀取短信回復(fù)  "AT+CMGR=5+CMGR:"RECREAD","+8618001797656",,"16/05/28,18:12:52+32"006:WD+05.1,ZL139.6,YL1.2,AUTO,YSJ-ONOK"
    //主動(dòng)收到短信          "AT+CMGR=6+CMGR:"RECUNREAD","+8618001797656",,"16/05/28,18:20:51+32"006:WD+05.1,ZL139.6,YL1.2,AUTO,YSJ-ONOK"
    qDebug() << TIMEMS << "Receive:" << data;
    emit receiveData(data);

    if (data.endsWith(",,0OK")) {
        clear();
        emit readMsgFinish();
        return;
    }

    //收到行短信后會(huì)收到 +CMTI:"SM",2 ,其中2為短信索引
    //接著根據(jù)新短信的索引讀取短信,讀取短信成功返回 AT+CMGR=5+CMGR:0,,230891683110304105F0240D91688110978310F000004121519115322303E13919
    if (data.contains("CMTI")) {
        //獲取新短信的索引號(hào)
        msgIndex = data.split(",").at(1).toInt();
        writeData(QString("AT+CMGR=%1\r").arg(msgIndex));
    } else if (data.contains("CMGR")) {
        //一步步解析服務(wù)中心號(hào)碼,發(fā)件人號(hào)碼,發(fā)送時(shí)間,短信內(nèi)容
        QStringList list = data.split(",");
        if (list.count() < 3) {
            return;
        }

        if (mode == 0) {
            QString unicode = list.at(2);
            int len = unicode.length();

            //去除末尾ok兩個(gè)字符
            unicode = unicode.mid(0, len - 2);
            if (unicode == "0") {
                clear();
                emit readMsgFinish();
                return;
            }

            int index = unicode.indexOf("08");
            QString centerNum = unicodeToTel(unicode.mid(index + 6, 12));
            QString msgTel = unicodeToTel(unicode.mid(index + 26, 12));
            QString msgType = unicode.mid(index + 40, 2);
            QString msgTime = unicodeToTime(unicode.mid(index + 42, 12));
            QString msgContent = unicode.mid(index + 58);

            //類型為 00 則采用的是 7bit 編碼,需要用 7bit 解碼
            //類型為 08 則采用的是 unicode 編碼
            if (msgType == "00") {
                msgContent = unicodeToMsg7Bit(msgContent);
            } else if (msgType == "08") {
                msgContent = unicodeToMsg(msgContent);
            }

            //發(fā)送收到新短信信號(hào)
            emit receiveMsg(centerNum, msgTel, msgTime, msgContent);
        } else {
            QString centerNum = "13800000000";
            QString msgTel = list.at(1).mid(4, 11);
            QString msgTime = list.at(3);
            msgTime = msgTime.mid(1, msgTime.length());
            msgTime.replace("/", "-");
            msgTime = "20" + msgTime + " " + list.at(4).mid(0, 8);

            QStringList str;
            for (int i = 4; i < list.count(); ++i) {
                str.append(list.at(i));
            }

            QString msgContent = str.join(",");
            msgContent = msgContent.split("\"").at(1);
            msgContent = msgContent.mid(0, msgContent.length() - 2);

            //發(fā)送收到新短信信號(hào)
            emit receiveMsg(centerNum, msgTel, msgTime, msgContent);
        }
    } else if (data.contains("NOCARRIER")) {
        emit callFinsh();
    } else if (data.contains("NOANSWER")) {
        emit callError();
    } else if (data.contains("RING")) {
        QString tel;
        QStringList list = data.split("\"");
        if (list.count() > 1) {
            tel = list.at(1);
        }
        emit receiveCall(tel);
    } else if (data.contains("DTMF")) {
        int index = data.indexOf("DTMF");
        QString key = data.mid(index + 5, 1);
        emit receiveKey(key);
    }
}

void SendMsgThread::deleteMsg()
{
    //自動(dòng)刪除SIM卡上的短信
    if (autoDelete) {
        deleteMsg(msgIndex);
    }
}

QString SendMsgThread::sendAT(const QString &cmd, int sleep)
{
    if (!isOpen || !isLive) {
        return "";
    }

    //主動(dòng)執(zhí)行命令期間,斷開收到數(shù)據(jù)信號(hào)槽連接
    disconnect(com, SIGNAL(readyRead()), this, SLOT(readData()));
    writeData(QString("%1\r").arg(cmd));
    msleep(sleep);

    QString data = com->readAll();
    data.replace(" ", "");
    data.replace("\r", "");
    data.replace("\n", "");
    if (data.length() > 0) {
        qDebug() << TIMEMS << "Result:" << data;
        emit receiveData(data);
    }

    //完成處理后,重新綁定收到數(shù)據(jù)信號(hào)槽連接
    connect(com, SIGNAL(readyRead()), this, SLOT(readData()), Qt::DirectConnection);
    return data;
}

bool SendMsgThread::sendMsg(const QString &tel, const QString &msg)
{
    bool ok = false;
    char ctrlz  = 26;
    int sleepTime;
    QString msgContent;
    QString sendMsg;

    if (mode == 0) {
        sleepTime = 6000;
        msgContent = QString("%1%2%3%4%5").arg("0011000D91").arg(getMsgTel(tel))
                     .arg("000801").arg(getMsgHex(msg)).arg(ctrlz);
        sendMsg = QString::number(getMsgLen(msg));
    } else {
        sleepTime = 1000;
        msgContent = QString("%1%2").arg(msg).arg(ctrlz);
        sendMsg = tel;
    }

    //首先進(jìn)入發(fā)送短信狀態(tài)
    QString result = sendAT(QString("AT+CMGS=%1\r").arg(sendMsg), 300);
    //返回結(jié)果最末一位為 > 后輸入短信內(nèi)容編碼,發(fā)送短信正文
    if (result.right(1) == ">") {
        result = sendAT(msgContent, sleepTime);
        if (mode == 0) {
            if (result.right(2) == "OK") {
                ok = true;
            }
        } else {
            if (result.right(2) == "OK" || result.startsWith(msg)) {
                ok = true;
            }
        }
    }

    return ok;
}

void SendMsgThread::startCall(const QString &tel)
{
    sendAT(QString("ATD%1;").arg(tel), 100);
}

void SendMsgThread::stopCall()
{
    sendAT(QString("ATH"), 100);
}

void SendMsgThread::answerCall()
{
    sendAT(QString("ATA"), 100);
}

到此這篇關(guān)于Qt物聯(lián)網(wǎng)管理平臺(tái)之實(shí)現(xiàn)告警短信轉(zhuǎn)發(fā)的文章就介紹到這了,更多相關(guān)Qt告警短信轉(zhuǎn)發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++?functional庫中的仿函數(shù)使用方法

    詳解C++?functional庫中的仿函數(shù)使用方法

    仿函數(shù)(functor)又稱之為函數(shù)對(duì)象(function?object),實(shí)際上就是?重載了()操作符?的?struct或class。本文將詳細(xì)講解C++中仿函數(shù)的使用方法,需要的可以參考一下
    2022-04-04
  • 從C語言中讀取Python 類文件對(duì)象

    從C語言中讀取Python 類文件對(duì)象

    這篇文章主要介紹了如何從C語言中讀取Python 類文件對(duì)象,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺談stringstream 的.str()正確用法和清空操作

    淺談stringstream 的.str()正確用法和清空操作

    下面小編就為大家?guī)硪黄獪\談stringstream 的.str()正確用法和清空操作。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++程序設(shè)計(jì)-五子棋

    C++程序設(shè)計(jì)-五子棋

    本文將以簡單的存儲(chǔ)結(jié)構(gòu)及簡單的運(yùn)算,條件語句,分支語句,循環(huán)語句結(jié)合,帶來一個(gè)雙人對(duì)戰(zhàn)版五子棋,這是一個(gè)簡單的模型,實(shí)現(xiàn)了五子棋最最基本的功能。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • C++中的哈希容器unordered_map使用示例

    C++中的哈希容器unordered_map使用示例

    這篇文章主要介紹了C++中的哈希容器unordered_map使用示例,本文直接給出實(shí)例代碼,并講解了一些hash table的知識(shí),需要的朋友可以參考下
    2015-06-06
  • 利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例

    利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例

    今天小編就為大家分享一篇關(guān)于利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù))

    C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實(shí)現(xiàn)圖片放大縮小

    C語言實(shí)現(xiàn)圖片放大縮小

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖片放大縮小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入第K大數(shù)問題以及算法概要的詳解

    深入第K大數(shù)問題以及算法概要的詳解

    本篇文章是對(duì)第K大數(shù)問題以及算法概要進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用OpenCV檢測(cè)圖像中的矩形

    使用OpenCV檢測(cè)圖像中的矩形

    這篇文章主要為大家詳細(xì)介紹了使用OpenCV檢測(cè)圖像中的矩形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評(píng)論