当前位置:首页 » 编程语言 » 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
});
}