1. 基於c語言,opencv庫,如何實現將一張圖像中頭發變成花白,最好是非常逼真的!不需要代碼。就給100分吧!
我覺得這個問題只需要對目標圖片進行反色就行了。
首先標志感興趣的區域ROI,然後獲取imgdata,然後invert(或者cvNot(img))。當然適合黑色的頭發,其它顏色就需要樓上說的像素增值了。
2. opencv2.3.4能寫c語言的程序嗎
你的語文老師告訴你應該這么問:「Opencv的函數是c++還是c語言?」。
能。
多少函數都是c寫的,但是很多函數用到了多態性,你c就不好使了。
其實圖像處理,你說c也能做,c++也能做,用啥都無所謂,歸根結底就是對指針的操作然後對相應的像素值處理,so easy!
3. 哪位大神能用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
});
}
4. 求助,我用C語言的opencv庫,我定義了一個1行n列的矩陣,想用指針讀取矩陣的最後一個元素,但是
應該是C++吧,我沒用過 opencv,可能回答不一定正確,忘諒解! 我覺得可能問題在R是以位元組計算而整型是以4位元組計算的,是不是最後一句把180改成45試試
5. 自己寫的一段C語言代碼,調用的是opencv庫,代碼應該沒錯誤,運行的時候卻出現問題,求解釋啊T T
按 ctrl + alt + e,將彈框里的所有異常勾選(用於捕獲運行時拋出的異常),再關閉彈框,重新運行程序,看下程序崩潰位置。
估計是兩重for循環中的 256 不對。感覺上應該用 cvGetSize() 返回的值來作為參考值,而不是自己指定。如果圖像大小不是 256 * 256 大小的話,估計會越界。
另外沒有用過 opencv,以上評論只是猜測,僅供參考。
6. 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
7. c++中如何調用opencv庫
一 在VC編譯器下,在Project菜單下選擇setting,彈出對話框。
1 設置預編譯的頭文件
選擇C/C++ 【Category】,在下拉菜單中選擇Preprocessor,然後在Additional Include directories 中輸入以下幾項:
C:\Program Files \OpenCV\cv\include (根據本人機器上OpenCV的安裝路徑進行設置,如在D盤,則寫D: ,以下同)
C:\Program Files \OpenCV\otherlibs\highgui
C:\Program Files \OpenCV\cxcore\include(新版本需要)
C:\Program Files \OpenCV\otherlibs\cvcam\include
每一條之間用逗號隔開。其中C:\Program Files\Intel\opencv 為OpenCV的安裝路徑,這是通用的安裝路徑,建議最好採用這種設置,以方便大家交流;不然,每次都要重新設置路徑,比較麻煩。
2 設置鏈接庫
在 Link按鍵下的 Category下拉菜單中選擇 Input選項(指定要連接的庫文件,放棄連接的庫文件hao ),在Additional library path中,輸入:
C:\Program Files \OpenCV\lib
最後在 Setting For下拉菜單中依次選擇 Win32 Debug和 Win32 Release,分別在Object /library moles 輸入:
cv.lib highgui .lib cxcore.lib cvcam.lib
注意每個庫之間用一個空格隔開。
或者直接在all configurations中的Object /library moles 輸入:cv.lib highgui.lib cxcore.lib(新版本需要) cvcam.lib
(cxcore.lib highgui.lib 是幾乎所有OpenCV程序都要用到的函數庫,分別封裝了基本的函數和圖形界面介面,cv.lib中封裝了大量的圖像處理函數,cvcam.lib中封裝了很多針對視頻流的處理函數)
當前工程就可以使用OpenCV的函數了。
二 如果一直要使用OpenCV的函數,把其路徑設置到系統目錄下
在Tools 菜單下選擇 Options 子菜單,在彈出的對話框中選擇Directory,將用到的幾個庫的路徑添加進去。以後只需將所用的庫在Object /library moles下輸入就可以了,不用再每次指定路徑。
在Show directories for 下拉菜單中選擇Include files,輸入:
C:\Program Files \OpenCV\cv\include
C:\Program Files \OpenCV\otherlibs\highgui
C:\Program Files \OpenCV\cxcore\include(新版本需要)
C:\Program Files \OpenCV\otherlibs\cvcam\include
在Show directories for 下拉菜單中選擇Library files,輸入:
C:\Program Files \OpenCV\lib
注意:(防止每次都拷貝.dll文件)
我的電腦—屬性—高級—環境變數—path—C:\Program Files\OpenCV\bin
8. objective-c能調用opencv嗎
OpenCV
是一個開源的跨平台計算機視覺庫,實現了圖像處理和計算機視覺方面的很多通用演算法。
最近試著在MacOS和iOS上使用OpenCV,發現網上關於在MacOS和iOS上搭建OpenCV的資料很少。好不容易搜到些資料,卻發現由於OpenCV和XCode的版本更新,變得不再有用了。有些問題費了我很多時間,在此總結分享給大家,希望後來人少走些彎路。
可以預見到,隨著XCode和OpenCV的版本更新,本文可能不再有效了。所以特此註明,文本介紹的搭建方法僅針對於
XCode4.5.1
和
OpenCV
2.4.2版本。
MacOS系統中使用OpenCV
安裝OpenCV
相信大部分Mac用戶都安裝了brew或port,如果你沒有裝,那麼首先安裝一下brew吧。使用如下命令安裝brew:
9. 跪求C語言中得#include "cv.h"庫和#include "highgui.h"庫,要能用的,包含頭文件和源文件,謝謝。
這兩個是計算機視覺庫opencv中的頭文件,可以在http://opencv.willowgarage.com/wiki/InstallGuide找到下載方式。其穩定版本在http://sourceforge.net/projects/opencvlibrary上有下載,最新代碼可通過svn檢出https://code.ros.org/svn/opencv/trunk獲得。