當前位置:首頁 » 編程語言 » opencv3c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

opencv3c語言

發布時間: 2022-05-18 19:18:42

Ⅰ 怎麼用opencv獲取圖像灰度值(用c語言

1、可以變成灰度圖也可以不變。這里假設你的圖像都是IPL_DEPTH_8U類型。

2、如果變成灰度圖,就是單通道圖像,獲取的就是每一個像素點的灰度值。
IplImage* img = cvLoadImage("test.bmp", 0);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s = cvGet2D(img, i, j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("gray value=%f\n",s.val[0]);

//方法二:使用直接訪問
uchar val = ((uchar *)(img->imageData + i*img->widthStep))[j]; //i和j的意義同上
printf("gray value=%d\n",val);
}
}

3、如果不變成灰度圖,就是3通道圖像,獲取的就是每一個像素點的BGR值,然後分別獲取B值,G值和R值。
IplImage* img = cvLoadImage("test.bmp", 1);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s=cvGet2D(img,i,j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //注意是BGR順序

//方法二:使用直接訪問
int bVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]; // B
int gVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]; // G
int rVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]; // R
printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR順序
}
}

Ⅱ opencv c語言undefiend rederence to cvround'怎麼解決

應該是那個庫沒被連接。有三人種情況可能導致這個問題。第一種是你自己的一個定義在別處而沒連接的obj文件需要連接。第二種情況可能是因為那個應該連接的庫沒有被連接,第三種可能是庫是被連接了,但參數寫在了用它的那個文件之前,那麼也可能出這個問題.

Ⅲ 「opencv」是什麼

OpenCV是一個用於圖像處理、分析、機器視覺方面的開源函數庫.
無論你是做科學研究,還是商業應用,opencv都可以作為你理想的工具庫,因為,對於這兩者,它完全是免費的。
該庫採用C及C++語言編寫,可以在windows, linux, mac OSX系統上面運行。該庫的所有代碼都經過優化,計算效率很高,因為,它更專注於設計成為一種用於實時系統的開源庫。opencv採用C語言進行優化,而且,在多核機器上面,其運行速度會更快。它的一個目標是提供友好的機器視覺介面函數,從而使得復雜的機器視覺產品可以加速面世。該庫包含了橫跨工業產品檢測、醫學圖像處理、安防、用戶界面、攝像頭標定、三維成像、機器視覺等領域的超過500個介面函數。
同時,由於計算機視覺與機器學習密不可分,該庫也包含了比較常用的一些機器學習演算法。或許,很多人知道,圖像識別、機器視覺在安防領域有所應用。但,很少有人知道,在航拍圖片、街道圖片(例如google street view)中,要嚴重依賴於機器視覺的攝像頭標定、圖像融合等技術。
近年來,在入侵檢測、特定目標跟蹤、目標檢測、人臉檢測、人臉識別、人臉跟蹤等領域,opencv可謂大顯身手,而這些,僅僅是其應用的冰山一角。
如今,來自世界各地的各大公司、科研機構的研究人員,共同維護支持著opencv的開源庫開發。這些公司和機構包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋。。。。

Ⅳ OPENCV代碼使用的是什麼語言

OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效--由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了圖像處理和計算機視覺方面的很多通用演算法。

OpenCV用C++語言編寫,它的主要介面也是C++語言,但是依然保留了大量的C語言介面。該庫也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的介面。這些語言的API介面函數可以通過在線文檔獲得。如今也提供對於C#,Ch, Ruby的支持。

Ⅳ c語言opencv,處理一幅圖像,處理後的圖像的長寬保持不變,如何保持圖像的dpi和圖像解像度保持不變

opencv里提供了函數,貌似叫cv_resize函數,可以指定解析度。只要獲取原圖像的解析度,按比例重新指定新的解析度就行了。

Ⅵ opencv用什麼語言比較好

使用的話Python和C++都可以。因為介面類似,C++和Python開發效率差距不大,性能上差距也不大。至於我自己,在Python程序里用Python介面,在C++程序里用C++介面,C#程序我就用Emgu CV了(這個據說C++也可以用)OpenCV是一個基於BSD許可的開源跨平台計算機視覺庫,其本身是用 C語言寫的,所以用 C++開發性能可能好些,但開發的效率不高,python 有大量的這方面的庫程序,開發效率高opencv 是一個視覺庫,可以很方便的實現各種圖像操作,比如平滑,去噪等。c ++ 的教程比較多,可能更主流一些。opencv為開源的圖形處理庫,本身就是C++開發的,自然用C++開發,無縫對接的好如果項目是大型項目,我建議速度用c++,質量就用Python,python的開源庫比較多

Ⅶ opencv中c語言風格程序,改寫為c++風格程序。

Mat hsv[3]={Mat::zeros(src.size(), CV_8U),Mat::zeros(src.size(), CV_8U),Mat::zeros(src.size(), CV_8U)};
Mat h=Mat::zeros(src.size(), CV_8U);

Mat s=Mat::zeros(src.size(), CV_8U);
Mat v=Mat::zeros(src.size(), CV_8U);

Ⅷ c語言 與opencv相關程序出錯。

int
main(
int
argc,
char**
argv
)
{
//========================================================
//
CvCapture
是一個結構體,用來保存圖像捕獲所需要的信息。
//
opencv提供兩種方式從外部捕獲圖像,一種是從攝像頭中,一種
//
是通過解碼視頻得到圖像。兩種方式都必須從第一幀開始一幀一幀
//
的按順序獲取,因此每獲取一幀後都要保存相應的狀態和參數。
//
比如從視頻文件中獲取,需要保存視頻文件的文件名,相應的解碼器
//
類型,下一次如果要獲取將需要解碼哪一幀等。
這些信息都保存在
//
CvCapture結構中,每獲取一幀後,這些信息都將被更新,獲取下一幀
//
需要將新信息傳給獲取的api介面
//=======================================================
CvCapture*
capture
=
0;
//===========================================================
//
IplImage
是結構體類型,用來保存一幀圖像的信息,也就是一幀
//
圖像的所有像素值構成的一個矩陣
//===========================================================
IplImage
*frame,
*frame_
=
0;
//
創建一個窗口,用「result」作為窗口的標識符
cvNamedWindow(
"result",
1
);
//
==========================================
//
初始化一個視頻捕獲操作。
//
告訴底層的捕獲api我想從
Capture1.avi中捕獲圖片,
//
底層api將檢測並選擇相應的解碼器並做好准備工作
//==============================================
capture
=
cvCaptureFromFile("c:\\Capture1.avi")
//
如果
初始化失敗,那麼capture為空指針,程序停止,
//
否則進入捕獲循環
if(
capture
)
{
//
捕獲循環
for(;;)
{
//
調用cvGrabFrame,讓底層api解碼一幀圖像
//
如果解碼失敗,就退出循環
//
如果成功,解碼的圖像保存在底層api的緩存
if(
!cvGrabFrame(
capture
))
break;
//
將解碼得到圖像信息從緩存中轉換成IplImage格式放在frame中
frame
=
cvRetrieveFrame(
capture
);
//
如果獲取緩存或轉換失敗,則退出循環
if(
!frame
)
break;
//
將frame中的圖像信息在窗口result中顯示
cvShowImage(
"result",
frame
);
//
暫停一會兒,讓你看一下圖像
Sleep(66.9);
//
如果你敲了鍵盤,就退出程序,否則繼續捕獲下一幀
if(
cvWaitKey(
10
)
>=
0
)
break;
}
//
退出程序之前要清理一下堆棧中的內存,免得內存泄露
cvReleaseImage(
&frame_
);
//
退出之前結束底層api的捕獲操作,免得它們占著茅坑不拉屎
//
比如會使得別的程序無法訪問已經被它們打開的文件
cvReleaseCapture(
&capture
);
}
cvDestroyWindow("result");
return
0;
}
夠清楚了吧,good
luck

Ⅸ opencv2.3.4能寫c語言的程序嗎

你的語文老師告訴你應該這么問:「Opencv的函數是c++還是c語言?」。
能。
多少函數都是c寫的,但是很多函數用到了多態性,你c就不好使了。
其實圖像處理,你說c也能做,c++也能做,用啥都無所謂,歸根結底就是對指針的操作然後對相應的像素值處理,so easy!

Ⅹ 哪位大神能用c語言 重寫opencv 的下面6個函數或者從源碼中整理出來,可以編譯,運行

去git上面看看源碼

//先說一下這個函數吧
//cvNamedWindow
CV_IMPLintcvNamedWindow(constchar*name,intflags){
CV_FUNCNAME("cvNamedWindow");
if(!name)CV_ERROR(CV_StsNullPtr,"NULLname");
HighguiBridge::getInstance().namedWindow(name);
returnCV_OK;
}
//而它又需要HighhuiBridge這個類,它有個單例工廠方法
HighguiBridge&HighguiBridge::getInstance(){
staticHighguiBridgeinstance;
returninstance;
}
//上面2個函數實際調用這2個成員函數
CvWindow*HighguiBridge::namedWindow(cv::Stringname){
CvWindow*window=HighguiBridge::getInstance().findWindowByName(name.c_str());
if(!window)window=createWindow(name);
returnwindow;
}
//創建窗口先是查找有沒有已有窗口
CvWindow*HighguiBridge::findWindowByName(cv::Stringname){
autosearch=windowsMap->find(name);
if(search!=windowsMap->end())returnsearch->second;
returnnullptr;
}
//如果沒有會用這個函數創建
CvWindow*HighguiBridge::createWindow(cv::Stringname){
CvWindow*window=newCvWindow(name);
windowsMap->insert(std::pair<cv::String,CvWindow*>(name,window));
returnwindow;
}
//創建窗口是CvWindow類
classCvWindow{
public:
CvWindow(cv::Stringname,intflag=CV_WINDOW_NORMAL);
~CvWindow();
/**@briefNOTE:prototype.
.
*/
voidcreateButton(cv::Stringname);
/**@.

.
*/
voidcreateSlider(cv::Stringname,int*val,intcount,CvTrackbarCallback2on_notify,void*userdata);
/**@briefUpdateswindowimage.
@.
Thefunctionupdateswindowimage.-doesnothing.
*/
voipdateImage(CvMat*arr);
/**@(slider).
@paramnameNameofthewindow.
(slider).
nullptr.
*/
CvTrackbar*findTrackbarByName(cv::Stringname);
Page^getPage();
private:
cv::Stringname;
//HoldsimagedatainCVformat
CvMat*imageData;
//
std::map<cv::String,CvTrackbar*>*sliderMap;
//Windowcontentsholder
Page^page;
//
Image^imageControl;
//Containerforsliders
Panel^sliderPanel;
//Containerforbuttons
//TODO:prototype,notavailableviaAPI
Panel^buttonPanel;
//.
//RequiredsinceimageData->
intimageWidth;
//t
staticconstPlatform::String^markupContent;
//DefaultSlidersize,
;
};
//CvWindwo構造函數為
CvWindow::CvWindow(cv::Stringname,intflags):name(name){
this->page=(Page^)Windows::UI::Xaml::Markup::XamlReader::Load(const_cast<Platform::String^>(markupContent));
this->sliderMap=newstd::map<cv::String,CvTrackbar*>();
sliderPanel=(Panel^)page->FindName("cvTrackbar");
imageControl=(Image^)page->FindName("cvImage");
buttonPanel=(Panel^)page->FindName("cvButton");
//.
//,afterthatwecan
//updateothercontrols
imageControl->Loaded+=refnewWindows::UI::Xaml::RoutedEventHandler(
[=](Platform::Object^sender,
Windows::UI::Xaml::RoutedEventArgs^e){
//
for(autoiter=sliderMap->begin();iter!=sliderMap->end();++iter){
iter->second->getSlider()->Width=imageControl->ActualWidth;
}
//
//TODO:implementwhenaddingbuttons
});
}