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获得。