2021年1月13日 星期三

[範例]如何在QT中使用QPainter

標題:[範例]如何在QT中使用QPainter。

本篇以Visual Studio 2019做範例。


首先建立一份QT專案後,找到一個繼承QMainWindow的class。

它的位置應該在[專案名稱].h的地方。

我的專案名稱是kaleido_painter,所以是kaleido_painter.h。


然後在裡面的public之類的地方加入這段:

void paintEvent(QPaintEvent*);



範例:(kaleido_painter是我的專案名稱,請更改為自己的)

class kaleido_painter : public QMainWindow

{

    Q_OBJECT

public:

    kaleido_painter(QWidget *parent = Q_NULLPTR);

    void paintEvent(QPaintEvent*);

private:

    Ui::kaleido_painterClass ui;

};


然後到main.cpp的地方,引入兩個套件:

#include <QPainter>

#include <QPen>


並在main函數的上方填入以下程式碼:


範例:(kaleido_painter是我的專案名稱,請更改為自己的)

void kaleido_painter::paintEvent(QPaintEvent* event)

{

    Q_UNUSED(event);

    QPainter painter(this);

    painter.setRenderHint(QPainter::Antialiasing, true);

    painter.setPen(QColor(0, 140, 250));

    painter.drawLine(QPointF(0,0), QPointF(100, 150));

}


QColor是RGB的值。

兩個QPointF分別為起始點和終點的座標。


然後按下執行:



就會看到一條線被畫上去了。

在Visual Studio 2019安裝OpenCV4

 標題:在Visual Studio 2019安裝OpenCV4

今天,我們要在Visual Studio 2019安裝OpenCV4,直接進入正題吧。


首先,去這個OpenCV官方網址安裝OpenCV:

https://opencv.org/releases/


看到我的文章標題就曉得,我們要選的版本當然是最新的4.5版本。



點選完紅色框框處後會載一個執行擋下來,我們點開它。

然後選擇安裝路徑。


建議請選擇C碟而不是D或E之類的磁碟,避免之後發生程式路徑上的麻煩。

如果說,C碟快滿了,不想塞進C碟,怎麼辦呢?

它才1.25GB而已,如果你的電腦連1.25GB的資料都塞不進C碟,建議重灌電腦,或換大一點的磁碟。

用好一點的設備,對你未來在OpenCV的開發上會比較好d(`・∀・)b


接著按Extract開始安裝。


它安裝很快,連我那台無料星筆電都能十秒內裝完。


裝完後你應該會在C碟找到一個opencv的資料夾。

從裡面複製一份類似 C:\opencv\build\x64\vc15\bin 的路徑。

注意:不是 C:\opencv\build\bin



然後開啟本機,按右鍵/內容。



選擇進階系統設定/進階/環境變數。 (如下圖)



然後找到一個叫Path的變數,選擇後按編輯/新增。

然後輸入剛剛複製的C:\opencv\build\x64\vc15\bin。

然後按確定,剩餘的視窗也是按確定。



然後我們從Visual Studio 2019新增一份C++的專案。(這部分應該不用多加贅述)

然後按專案/[專案名稱]屬性。 (我的範例專案名稱為cvtest)



找到VC++目錄的地方。

在Include目錄之後加上 ;C:\opencv\build\include

在程式庫目錄之後加上 ;C:\opencv\build\x64\vc15\lib

注意,前後要用「;」區隔。


然後你去C:\opencv\build\x64\vc15\lib。

找到類似opencv_world451.lib的東西,把檔名複製起來。

如果你的專案是debug模式,就要複製檔名後面有個d的,就是opencv_world451d.lib。

如果你的專案是release模式,就要複製opencv_world451.lib。


然後回到剛剛的屬性頁。
按連接器/輸入。
在其他相依性的地方加入剛剛複製的opencv_world451.lib。
因為我現在是debug模式,所以是opencv_world451d.lib。
注意,前後要用「;」區隔。



然後我們輸入以下程式碼做測試:


我很貼心的幫你們打好了,直接複製就行。

記得紅色的檔名處要改成你的圖片路徑。

#include<opencv2/opencv.hpp>

#include <iostream>

using namespace cv;

int main()

{

Mat img = imread("C:/ckey/0.jpg", -1);

namedWindow("test", WINDOW_AUTOSIZE);

imshow("test", img);

waitKey(0);

destroyWindow("test");

return 0;

}


輸入完後按下執行。

就會看到我那張超讚的立華奏的圖被OpenCV開啟了。



如果覺得立華奏很讚,或這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。

您的支持是我寫文的最大動力。

如果失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。


希望這篇文有幫助到各位ξ( ✿>◡❛)

2021年1月10日 星期日

[懶人包]解決blogger無法投放廣告的問題

標題:[懶人包]解決blogger無法投放廣告的問題

遇到的問題包括:你在 AdSense 中輸入的網誌詳細資料有問題,請前往 AdSense 確認你的網誌網域名稱 (xxx.blogspot.com) 是列示為網站。

以及:我們正在為你完成設定,這項程序通常會在幾天內完成,但有時最久可能需要 2 週。我們會在一切準備就緒時通知您,接下來您就可以開始刊登廣告來賺取收益。

然後等了20週它都不會告訴你準備好了。

因為你沒有加script在blogger的header裡。


解決方法懶人包:

首先進去AdSense,把你的發布商ID複製起來。



然後回你的Blogger,按主題/自訂/編輯HTML。


然後編輯HTML。



找到一個<head>標籤,在它後面輸入

<script async='async' data-ad-client='ca-pub-xxxxxxxxxxxxxx' src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'/>

紅字的pub-xxxxxxxxxxxxxx是你剛剛複製的發佈商ID。記得前面要加ca。

例如:

<script async='async' data-ad-client='ca-pub-123456789' src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'/>

輸入在head之後的任何一個位置就行,前提是要放在</head>之前。

也就是說,這段程式碼要放在<head>與</head>之間。


放完之後,按下儲存。

接著回到blogger介面。斷開AdSense與blogger的連結,然後再加入AdSense(這步驟可能不用做)。

做完之後,它依然會告訴你「我們正在為你完成設定,這項程序通常會在幾天內完成,但有時最久可能需要 2 週。我們會在一切準備就緒時通知您,接下來您就可以開始刊登廣告來賺取收益。

我以為又失敗了。

但這次不會等20週都等不到了,我當時過了兩天,它就寄信給我說申請通過了。



我也能放廣告了。


超感動,一定要PO到blogger造福那些跟我一樣等超過20週,還沒等到結果的人。


如果這篇真的有幫助到你們,並成功了,請留言或按個廣告吧,我會很感謝您的。

如果等了兩週後依然失敗了,也請留言讓我知道,我再檢討看看此文是否有寫錯。


希望這篇文有幫助到你們

2021年1月1日 星期五

[解決]執行QT 出現 「內嵌變數至少需要 '/std:c++17'」的錯誤

標題:解決Visual Studio 執行QT 出現 「內嵌變數至少需要 '/std:c++17'」的錯誤。

副標題:解決Visual Studio 執行QT 出現 「無法由initializer list轉換為qbytearrayview」的錯誤。


前些日子在安裝好QT後,在Visual Studio上執行它,結果出現以下錯誤:


「內嵌變數至少需要 '/std:c++17'」
或者是「無法由initializer list轉換為qbytearrayview」

如何解決呢,首先,按 「專案 」 / 「屬性」 / 「C/C+」 / 「語言」。


將「C++語言標準」從「ISO C++ 14標準」更改為「ISO C++ 17標準」。


更改完之後,重新執行一次QT程式,就會發現程式已經可以執行了。


如果覺得這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。

您的支持是我寫文的最大動力。

如果依然失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。



希望這篇文有幫助到各位ξ( ✿>◡❛)

2020年11月25日 星期三

在cv2中實現BGR轉LAB

 標題:在cv2中實現BGR轉LAB 或

在python cv2中進行正確的BGR2LAB 

在python cv2中取得LAB


其實正確版要做兩個步驟,第一項是

步驟一:

img2=cv2.cvtColor (img, cv2.COLOR_BGR2LAB)

但是,轉出來的並不是正確的LAB。

步驟二:

還要再將LAB的L進行:L=L*100/255

再將LAB的A進行:A=A-128

再將LAB的B進行:B=B-128

記得型態要改成.astype('float')而非原來的uint8


如此一來便得到正確的BGR2LAB了。

2020年10月9日 星期五

如何在three.js中實現MIP(maximum intensity projection)

 標題:如何在three.js中實現MIP(maximum intensity projection)

很簡單,只要對material加這兩行:

material.blending = THREE.CustomBlending;

material.blendEquation = THREE.MaxEquation;


加完之後,最大密度投影就完成了:



2020年10月4日 星期日

解決matplotlab的TypeError: 'str' object is not callable.問題

 標題:解決matplotlab的TypeError: 'str' object is not callable.問題


今天在利用matplotlab畫圖時,編輯器報了以下錯誤:

TypeError: 'str' object is not callable.


如何解決呢,我們只要把內核關掉重開就行,如果不知道怎麼關內核,可以直接關閉程式後重開程式。

重開之後,圖已經可以畫了。



[免降版]解決object arrays cannot be loaded when allow_pickle=false問題

標題:[不用降版本]解決object arrays cannot be loaded when allow_pickle=false問題


今天在使用Python的np.load時發生以下錯誤:

object arrays cannot be loaded when allow_pickle=false


看網路上說需要降numpy的版本,那有沒有不需要降版本的解決方式呢?有的。

我們把np.load("file.npy")改成np.load("file.npy",allow_pickle=True)

然後再執行一次,npy檔已經可以載入了。


2020年8月31日 星期一

Chrome的歷史紀錄找不到怎麼辦

今天想要調出Chrome的歷史紀錄,卻發現歷史紀錄的選項不見了。

按右鍵也找不到。

解決方法:
按下鍵盤上的Ctrl H

Chrome的歷史紀錄就被調出來了。

2020年8月27日 星期四

如何更改VScode的每行長度上限

完整標題:如何更改Visual Studio Code自動縮排HTML時的每行長度上限。

最近在寫HTML程式,發現Visual Studio Code在自動縮排HTML時,太長的會自動換行。

如圖所示

如何解決呢。

首先按檔案/喜好設定/設定。

然後搜尋length或其他可以找到HTML>Format:Wrap Line Length的關鍵字,從圖中可以看到它預設超過120個字會自動換行,我們現在把它更改為140或其他長度,這樣一來,長度超過140字的HTML程式碼才會自動換行。

更改完成後,回到Visual Studio Code重新自動縮排一次,原本每行超過120長度的程式碼已經不會自動換行了。


2020年8月16日 星期日

Excel Combobox 選取不了怎麼辦

今天在使用Excel Combobox時,發現無法選取Combobox裡面的選項。

它似乎是處於編輯中的狀態。

仔細看上方的選項,原來在設計模式中是不能選擇選項的,我們試著關閉上方控制項欄位中的設計模式選項。

關閉之後,Combobox的選項就可以選擇了。

2020年8月8日 星期六

[教學]如何在Windows7停用繼承

最近弟弟在電腦灌了Garena,我想讓它取消開機時自動啟動,看到網路上寫必須勾選停用繼承,然而,Windows7卻沒有停用繼承的選項,該去哪裡看呢?

首先,對著要停用繼承的檔案按右鍵/內容。

選擇安全性/進階,出現新視窗後,點選變更權限

取消勾選「包括從此物件的父項繼承而來的權限」

這時會跳出新視窗,請按下新增

接著對著剛剛顯示的視窗都按確定,繼承就會被停用了。

2020年8月6日 星期四

Python讀檔時發生PermissionError問題


最近用Python讀取csv檔時報了下面的錯誤:
PermissionError: [Errno 13] Permission denied: './PCA4.csv'


類似這種PermissionError的問題,十有八九都是因為有檔案還開著它。

所以我們看一下Excel是否開啟著這個csv檔,果然,是開著的,我們現在把它從Excel中關閉。

關閉之後,PermissionError的問題就解決了,csv檔也能正常存取。

2020年7月22日 星期三

[解決]MMD找不到d3dx9_32.dll的錯誤

今天在新電腦裝MMD時看到它說找不到d3dx9_32.dll,所以不能開。

這是因為新電腦中的DirectX還沒更新到最新版本的關係。

解決方式:
到微軟官方的這個網址下載並安裝DirectX更新,更新完MMD就可以執行了。
https://www.microsoft.com/zh-tw/download/details.aspx?id=35

2020年7月21日 星期二

[教學]釋放jupyter的GPU記憶體

目前在使用jupyter執行Tensorflow時發現,即使關閉了頁面,其記憶體與GPU的記憶體資源依然沒有釋放

如何解決呢

首先,進入檔案清單的頁面,按下Running


接著對要釋放記憶的工作按下shutdown,記憶體及GPU的資源就成功釋放了