2016年5月29日 星期日

C++ OpeCV 2.4.13 for Windows MinGW g++ [在 window上使用 MinGW g++ 編譯 opencv]

C++ OpenCV 2.4.13 for Windows MinGW g++

在 window上使用 MinGW g++ 編譯 opencv

前言

這幾天想用 MinGw 編譯 OpenCV,資料有些零散中文也不多
花了不少時間把搜尋資料,做好之後有順便做了一個懶人包
如果新手剛學,建議可以直接用懶人包就好了
懶人包已經簡化到只需按兩個安裝按鈕,就這樣而已
還有編譯時只要把g++替換成cv2就好了
cv2 file.cpp -o file 就這樣,幫你處理掉重複又很長的代碼了

安裝

檔案:https://goo.gl/2HfaPV
測試程式碼:https://goo.gl/fjcY9P
以下是安裝步驟:(建議使用預設位置)
1.開啟 MingGW AutoInstall
2.開啟 OpenCV2413 AutoInstall
3.開啟 OpenCV_Tester
很神奇的就安裝完畢瞜~
注意:如果已經安裝過MingGW,請移除在安裝(環境變數也要移除)
程序並沒有防呆會處理這個狀況,會出問題的。
看看有沒有跳出測試通過,有的話就可以開始使用了
看到這個就成功摟

懶人包裡面有sublime text3的編譯文檔,
可以直接 CTRL+B 編譯

如何以命令編譯C++檔案

懶人包

如何編譯指令在 OpenCV_Tester 內有說明
終端機輸入 cv2 souce.cpp -o souce 這樣即可

命令

原本的代碼則是:(這裡是依照我的檔案路徑)
g++ -Wall -std=c++14 -IC:\OpenCV\include\ -LC:\OpenCV\MinGw_64\lib\ -lopencv_core2413 -llibopencv_calib3d2413 -llibopencv_core2413 -llibopencv_features2d2413 -llibopencv_flann2413 -llibopencv_highgui2413 -llibopencv_imgproc2413 -llibopencv_video2413 main.cpp -o opencv.exe
如果是安裝我的懶人包,可以使用 cv2 來替換
cv2 souce.cpp -o souce
  • 20170721更新命令先前有缺失,某些庫不能編,懶人包與sublime配置檔我還沒更新

重新編譯OpenCV檔案

如果你要自己編譯其實也沒到多複雜只是很多設定要自己來別漏掉就好了
跟linux一樣,cmake編譯,然後產出的文件在依照規定對應就完成瞜
有興趣的可以參考:http://goo.gl/f7r2C7
還有:http://goo.gl/X1S0P

2016年5月22日 星期日

Arduino Uart 互傳字串 與 字串處理 依特定符號切割

Arduino Uart 互傳字串 與 字串處理 依特定符號切割

兩台arduino要互傳

兩台arduino要互傳字串的話這裡寫一個範例
注意
  • 兩台不要形成死循環,[A給B] [B再給A] [然後A再給B]…..
  • 會新建一個uart通道,而不是使用預設的
通道請參考程式碼頂端的宣告
已經盡量用不會混淆的方式註解
要表達兩台人稱問題其實有些困難XD
缺少的函式庫在這裡可以下載
https://mega.nz/#F!dhlUBaYD!J74z_wKIqvY2lRbjP7l9pA
到這邊兩台都直接用同一個代碼燒錄上去即可,然後把兩台 Arduino 的 RXTX 也就是
A 的 2 接到 B 的 3
A 的 3 接到 B 的 2
然後打開兩個 Arduino IED ,選好 USBport 個別打開 右上角放大鏡(serial port terminal)
再來A發送訊息B的視窗就可以收到了


字串切割

字串切割的話這裡也有一個範例,可以自訂格式
比如說你想要船 0,1,2,3 你想把他們依照逗號存到陣列內
也可以依照其他符號,由你自己設定
裡面忘記放使用範例了
大致來說是這樣的
(第一個放字串,第二個放符號)
str_split(const char* str, const char* sp)
char str="1,2,3";
int *ptr=0;                  //注意星號
ptr=str_split(str,",");  //逗號可以任意修改成你要的形式
println(ptr[0]);           //返回為一個陣列的指標,可以直接使用下標[]呼叫

釋放記憶體

因為是動態陣列,結束時要釋放記憶體
(動態陣列意思就是回便你字串都常都可以適應)
free(ptr);
不過arduino是沒有結束點的,無限循環,
依照你的程式設計去選擇,這裡也不好舉例子說明
通常不放也不會造成問題,新手可以先暫時放置著
完成功能後再去想辦法解決這個問題。

為什麼要使用 C++ 而不要用 C

接觸 [C++] [1個月]
覺得比較重要的概念 (入門)
我在寫C的時候就發現一些問題了
[雙向鏈結](https://goo.gl/XGvMhh)
-
1.如果你寫過一堆副程式,你就會發現資料的傳遞
真的很麻煩,不得不用結構去組成
一堆變數你根本沒辦法搞清楚誰是誰
-
2.再來就是傳遞時候,因為不是在同一個區域(不同副程式)
記憶體不共用,變數沒辦法直接修改
比如說你有一個 i=10; 你沒辦法 add(int i){...}
就修改 i 的數值,這會造成不少困擾
(比如說沒辦法將功能拆到函式內
拆不出去只能寫在主程式,寫多了
等你回頭一看的時候你就知道完蛋了)
逼不得已只能用指標去操作
int x=5, *i=&x; add(int *i){...}
如此一來就能直接改了
-
3.即便滿足以上條件,還是有個大問題
有些根本無關聯的變數你不想塞在
同一個結構內(無關聯的到時候亂掉)
就變成每個副程式都要導入一堆參數
typedef struct struct _node node;
struct struct _node {...};
void fun(node a, int a, int b, int c, int d, int e ){...}
這個就不好解啦XD 乖乖一個一個打
-
如果用類別去寫,上述問題大多能改善
1. 他本身就有點類似結構概念可以放很多變數
2. 在同一個類別內不同副程式仍可以直接存取 this->a
3. 都直接存取了,當然就不用導入了
(即便不同類別還有[朋友], [繼承]的方法可以共用)
-
比較不一樣的地方是類別的使用可以用 點
class demo{...};
demo temp(0); //初始數值0
temp.ad(1).ad(2).ad(3); // 0+1+2+3=6
temp.pri(); //印出
看出來了嗎如果是傳統副程式
1. 上述做法大概要分行了
int temp=0,*p=&temp;
ad(p,1);
ad(p,2);
ad(p,3);
printf(...);
2. 還有一種情況全部都塞在裡面
[ad(ad(ad()));]這真的會害人看不懂XDD
-
阿對了還有一個很重要的概念
不要花太多時間在沒有報酬的程式上
每一次的寫作,考慮以後是否能重複使用
然後就這樣把她留下來,不要同一個坑跌兩次
要嘛就花很多很多時間一次弄到最好
要嘛就隨便剪剪貼貼湊出功能,管他有沒有排版
前者你賺到了一份完整可以重複使用程式碼,
而且不用擔心未來的自己看不懂,
後者你賺到時間,把時間花在有用的事情上吧
畢竟一次性的功能也沒人會去看程式碼的XDD

2016年4月22日 星期五

Windows10 8 7 區域網路 共用資料夾 手機存取電腦硬碟 電腦存取手機檔案

電腦存取手機檔案

如果只是想簡單用無線網路存取手機檔案
可以直接使用網頁存取即可
手機須安裝APP安裝完畢依照指示設定即可存取
1.
如果要存取SD卡,第一次使用需依照指示指定位置
2.
使用區域網路連線必須確定電腦與手機屬於同一個網段
也就是依靠同一台無線訊號台上網(線插他屁股也算)

手機存取電腦檔案

電腦端設定

推薦:[8以上登錄Windows帳號,會有很多好處]
Win10如何判定有無登入可以從(注意登入市集不等於登入帳號)
  1. 帳戶裡面看看是不是你的信箱
  2. 桌面使用者文件是不是你的帳號名字
  3. 按開始左上角是不是帳號圖片與名字
  4. 隨便點個資料夾右鍵內容安全性,看看有沒有你的帳號
環境:開放共用的電腦有[登入帳號]或[電腦有設密碼]。
建議設定一下密碼,或更入微軟帳戶,這樣檔案比較安全。
下面會分別介紹伺服器端與客戶端如何設置

開放檔案共用


就這樣而已。((注意不要按共用
然後你要記下這台電腦的IP
Win10 IP 可以從工作管理員看到
Win7 可以按開始輸入 cmd 然後輸入 ipconfig

電腦端存取開放共用的檔案如果有第二台電腦

可以試試看打開 本機
位置輸入 //ip
比如說 //192.168.1.101
注意:
  1. 斜線不要錯邊了
  2. IP有可能是會變動的
或者可以直接打開 網路網路上的芳鄰
就可以看到共用的電腦了直接開進去
接著他會要你輸入帳密
  1. 就是你的微軟帳戶了
  2. 該電腦的使用者帳密> 如果兩台電腦有登入共用帳號,可以不用輸入直接開進去

手機端設定

手機端推薦下載 ES檔案瀏覽器
左邊選擇區域網路,上面搜尋你的主機
這裡的登錄帳密比較特別,不能直接用微軟帳戶
但如果你沒有登入微軟帳戶,僅是有設定帳密可以直接輸入

如何取得帳號

按一下win 搜尋 網路連線
按一下ALT出現選單接著
找到你的帳號前面就是了,如果是中文姓名好像是帳號前5碼
電腦設定好資料夾手機連上就可以觀看搂

環境沒有登入帳號或空白密碼

這可麻煩多了,建議設個密碼吧,然後往上看
除了以上之外(前面的還是做),需要多做2步
  1. 資料夾加開所有人權限
  2. 關閉密碼保護(截圖中沒關)
    如果是win7藍色那個框框叫做大項目可以縮起來
    總共有3個大項目的樣子,記得看一下有關閉密碼都要關
    印象中要設定2個,因為win10整合了只需要一個
最後推薦設密碼比較好啦~安全性問題
隨便列舉一個,chrome瀏覽器如果是空白密碼
可以直接看到你所有紀錄過的帳密

開機自動登入

或許你會說可是我不想要每次開機都卡住呀
開始→搜尋 netplwiz 你就會做了(登入微軟帳戶需輸入信箱)

2016年4月21日 星期四

Win7 8 永久移除 win10 更新提示 Win10回復Win7 8

今天剛好看FB有人不小心升級了,發文表示差點嚇死
他的處理方式直接關機,還好微軟軟體寫的好 ((汗....


如果已經不小心更新了,不要擔心還能還原,看下圖



如果你還原後不想再收到更新提醒:
https://goo.gl/v3d514 軟體直接執行就好了(降回去再執行哦)

20160528
關閉Win10可以自行google Never10
關閉Win10更新自行google Win Updates Disabler

#非常不建議把更新關調,最多設成手動
不過我有發現更新已經很少了,大多數的bug都修完了,建議設定自動就好

如果你想手動變更更新可以從[群組原則]




















無關的廢話
==========================================================
個人的看法是,能升級就升級了吧
我知道有一大堆人說不好用((這可能包含你

就問你一個問題,他跟win7哪裡不一樣
我相信你應該答不出來,因為根本一樣啊XDD
大概就輸入法要習慣一下(不過其實有方法可以變成跟7一樣)

好啦也不是推崇更新啦,只是我還真很認真去想過到底哪裡不一樣了QQ
已知道問題,老舊遊戲大概不能直接玩了,像是

  • 軒轅劍
  • 天之痕
  • 浣花洗劍錄
  • 中華英雄
  • 仙劍客棧
  • 仙劍奇俠傳1.2
不過我看我哥似乎找到一個
視窗化軟件可以直接在W10執行
而不用透過虛擬需運行XP
(覺得痛哭流涕嗎XD 天ㄚㄚ居然還有人知道這些童年神作)


至於我自己要升級的理由是
  • 安全(W7記得已經停止更新,用w7等於開門給駭客隨時都可以進)
  • 好看
  • 效能
  • 多工(多重桌面很方便)
  • 不用裝補丁(w7真的缺太多了,日文、SP1)
  • 線上使用者帳戶(這真的很厲害)
  • 市集APP
  • 開機速度

















2016年4月17日 星期日

Win10+8.1 公用網路 修改為 私人網路

Win10 Win8.1 修改 網路 型態 公用網路 私人網路

公用網路會導致的問題

公用網路的意思指的是當你的筆電連接到公用Wifi的時候,你並不希望在這個網域內的人可以pin到你,或是取得你的共享資料夾,選擇公用網路就會拒絕了
私人指的是在家裡的時候,區域網路是安全的而且你希望大家都可以看到這台電腦與存取,這時候要選擇私人網路。
一般在第一次接上網路線或是連接上Wifi的時候右邊會跳出來,不過很容易因為正在操作其他事情而點到,他就自己縮回去不見了;預設狀態是公用(安全性最高),這會導致分享資料夾看不到的。

Win10 方法

方法1

直接開啟網路(原本Win7的網路芳鄰)
就會提示你要你修改成私人了

方法2

  1. 搜尋[本機安全性原則]
  2. 左邊 [網路清單管理員原則]
  3. 上方頁面[網路位置]
  4. 修改為[私人]
本機安全性原則找不到的話看一下系統是不是家用版
記得家用版有缺一個服務,不曉得是不是這個