嵌入式程式除錯與opencv影像庫
目錄
一 . Ubuntu上的GDB
GDB : GNU Debugger,是GNU工程為GNU作業系統開發的 偵錯程式,但它的使用不侷限於GNU作業系統, GDB可以執行 在UNIX、Linux甚至Microsoft Windows
1.gdb除錯舉例
建立gdb.c(程式碼如下)
#include <stdio.h>
void ShowRevertNum(int iNum)
{
while (iNum > 10)
{
printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void)
{
int iNum;
printf("Please input a number :");
scanf("%d", &iNum);
printf("After revert : ");
ShowRevertNum(iNum);
}
用gdb除錯
gcc -o test -g gdb.c
gdb test
2.認識gdb命令
file裝入想要除錯的可執行檔案。
kill 終止正在除錯的程式。
list 列出產生執行檔案的原始碼的一部分。
next 執行一行原始碼但不進入函式內部。
step 執行一行原始碼而且進入函式內部。
run 執行當前被除錯的程式。
c 繼續執行程式。
quit 終止gdb。 • watch 使你能監視一個變數的值而不管它何時被改變。
backtrace 棧跟蹤,查出程式碼被誰呼叫。
print 檢視變數的值。
make 使你能不退出gdb就可以重新產生可執行檔案。
shell 使你能不離開gdb就執行UNIX shell命令。
whatis 顯示變數或函式型別。
break 在程式碼裡設斷點,這將使程式執行到這裡時被 掛起。
info break顯示當前斷點清單,包括到達斷點處的次數等。
info files 顯示被除錯檔案的詳細資訊。
info func顯示所有的函式名稱。
info local 顯示當函式中的區域性變數資訊。
info prog 顯示被除錯程式的執行狀態。
delete [n] 刪除第n個斷點。
disable[n] 關閉第n個斷點。
enable[n] 開啟第n個斷點。
ptype顯示結構定義。
set variable 設定變數的值。
call name(args)呼叫並執行名為name,引數為args的函式。
Finish 終止當前函式並輸出返回值。
eturn value停止當前函式並返回value給呼叫者。
二 .opencv的操作
1.opencv的安裝
在官網下載opencv3.4.10
2.opencv開啟照片的操作
(1) 讀入
然後將它移到home,並解壓,輸入unzip opencv-3.4.1.zip,進入解壓後的檔案包。
(2) 安裝和配置
安裝依賴庫和cmake
進入資料夾進行配置(cd my_build_dir)
cmake一下(cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/use/local …)
中間曾出現無法cmake的情況, 需要sudo apt-get install build-essential
執行命令,漫長的編譯過程
執行命令(sudo make install)
sudo make install 執行完畢後OpenCV編譯過程就結束了,接下來就需要配置一些OpenCV的編譯環境首先將OpenCV的庫新增到路徑,從而可以讓系統找到
(sudo gedit /etc/ld.so.conf.d/opencv.conf) 執行此命令後開啟的可能是一個空白的檔案,不用管,只需要在檔案末尾新增 /usr/local/lib
儲存回到命令列介面,執行如下命令使得剛才的配置路徑生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
在最末尾新增
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
儲存,執行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
至此所有配置完成
(3) Linux下程式設計
新建mytest檔案,然後建立test.cpp(cd opencv-3.4.1)(mkdir mytest)(touch test.cpp)(sudo gedit test.cpp)這幾步特別是最後一步不能寫錯。
程式碼是
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("lena.jpg");
argc == 2? cvLoadImage(argv[1]) : 0;
cvShowImage("Image", image);
if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);
for (int i = 0;i<image->height;i++)
for (int j = 0;j<image->width;j++)
{
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dx*dx + dy*dy)*scale);
uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
ptr[0] = cvRound(ptr[0] * weight);
ptr[1] = cvRound(ptr[1] * weight);
ptr[2] = cvRound(ptr[2] * weight);
}
Mat src;Mat dst;
src = cvarrToMat(image);
cv::imwrite("test.png", src);
cvNamedWindow("test",1); imshow("test", src);
cvWaitKey();
return 0;
}
儲存並編譯
gcc test.cpp -o test pkg-config --cflags --libs opencv
然後出現這種情況
要把gcc改成g++,然後執行./test,出現以下情況
此時,根據提示先安裝一下 “libgtk2.0-dev” 和 “pkg-config”,然後在重新 make 一下
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
cd ~/opencv3.4.3/my_build_dir/
rm -rf *
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
sudo make -j4
sudo make install
但是此時我發現選錯了,應該在mytset下,之前我是在my_build_dir。
經歷一番挫折後來到這裡,發現執行無結果,最後才發現是自己粗心的問題,圖片的名字與test裡的名字不符合/(ㄒoㄒ)/~~
3.opencv上開啟攝像頭操作
(1) 程式設計
新建一個 test4.cpp 檔案
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("讀取視訊幀",frame);
if(waitKey(30)==27)
{
break;
}
}
system("pause");
return 0;
}
然後檢查切換usb2,0或者3.0以及攝像頭是否連線
(2) 連線
然後檢查切換usb2,0或者3.0以及攝像頭是否連線
都準備好後,開啟cheess,發現還是黑屏,顯示沒有裝置,這裡花了很多時間,在同學的提醒下,才注意到自己的vm版本有點低了(15.0),於是找老師要了15.5.2版本的,安裝後重新執行,就成功了。
(3) 執行
g++ test4.cpp -o test4 pkg-config --cflags --libs opencv
//建立可執行檔案
./test1 //執行檔案
4.opencv開啟視訊操作
(1)準備工作
一、安裝 ffmpeg
a、支援庫的安裝
sudo apt-get install -y autoconf automake build-essential git libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
b、下載ffmpeg原始碼包,並將下載檔案移到 home 目錄下,解壓
unzip FFmpeg-release-3.4.zip
c、進入解壓目錄
cd FFmpeg
./configure --disable-yasm --enbale-shared --prefix=/usr/local/ffmpeg
環境配置一直出問題,解決不了,先放著。
(2)程式設計
(3)執行
(4)補充
相關文章
- OpenCV特徵提取與影像檢索實現(附程式碼)OpenCV特徵
- opencv——影像直方圖與反向投影OpenCV直方圖
- 影像程式設計的好幫手-四大影像庫:OpenCV/FreeImage/CImg/CxImage程式設計OpenCV
- 程式測試與除錯除錯
- 嵌入式系統除錯Uboot串列埠互動除錯除錯boot串列埠
- GDB程式碼除錯與使用除錯
- 除錯篇——除錯物件與除錯事件除錯物件事件
- 嵌入式Linux的除錯方案Linux除錯
- OpenCV與影像處理學習二——影像基礎知識(下)OpenCV
- OpenCV入門 2_1中使用【總結】的程式碼載入影像、顯示影像報錯OpenCV
- opencv 影像的 ROI、通道的拆分與合併OpenCV
- opencv 影像腐蝕、影像的膨脹OpenCV
- 嵌入式Linux的除錯技術Linux除錯
- 嵌入式系統除錯診斷方法除錯
- opencv 影像的入門OpenCV
- OpenCV系列之影像平滑OpenCV
- OpenCV(影像NaN處理)OpenCVNaN
- 學習除錯實時嵌入式軟體除錯
- 嵌入式軟體除錯常用知識點除錯
- opencv-python 影像 二OpenCVPython
- opencv——輪廓發現與輪廓(二值影像)分析OpenCV
- OpenCV7影像金字塔與輪廓檢測OpenCV
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV
- openCV中的影像處理 3 影像閾值OpenCV
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- 異常機制與遮蔽除錯程式碼除錯
- gdb除錯嵌入式裝置的core檔案除錯
- 嵌入式:本機檢視串列埠除錯資訊串列埠除錯
- Python 影像處理 OpenCV (16):影像直方圖PythonOpenCV直方圖
- Python 影像處理 OpenCV (14):影像金字塔PythonOpenCV
- opencv 影像的型別轉換、影像的縮放OpenCV型別
- Python 程式碼除錯—使用 pdb 除錯Python除錯
- gdb除錯命令小結_與多檔案除錯_遠端除錯除錯
- opencv 獲取影像的屬性OpenCV
- 日誌與除錯除錯
- 測試與除錯除錯
- 嵌入式安卓開發使用LLDB進行斷點除錯C/C++程式碼安卓LLDB斷點除錯C++
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython