Tag: opencv

openCV错误:断言失败(scn == 3 || scn == 4)

我在最后一帧有Assertion失败错误,同时逐帧读取和写入video。 错误只显示在最后一帧,不知道为什么。 在这里看到了这个答案,这建议给出waitkey,我的代码已经有了等待键。 我的简单代码如下 int main() { CvCapture *capture=cvCaptureFromFile(“C:\\vid\\op.mp4”); if(capture==NULL) { printf(“can’t open video”); } Mat frame, first_frame,current_frame; char buffer[100]; int frame_count=1,p=1; while(1) { /*Getting the current frame from the video*/ frame=cvQueryFrame(capture); cv::cvtColor(frame,current_frame,1); //saving current frame sprintf(buffer,”C:\\frames\\image%u.jpg”,p); imwrite(buffer,current_frame); p++; waitKey(1); } return 0; } 有人请帮忙 解决方案:我在读完每个文件后添加了一个检查 – if(frame.empty()){ fprinf(“cannot access frame”); return -1; }

使用Chessboard进行OpenCV转换

我刚刚开始尝试使用OpenCV。 我有一个静态位置的LCD设置,我想从图像中提取屏幕上显示的内容。 我已经看到用于校准相机的棋盘图案,但似乎用于不影响图像,这不完全是我想要做的。 我想我会在液晶显示屏上显示棋盘,然后找出将液晶显示屏的图像转换成直接在头顶和裁剪的棋盘理想视图所需的转换。 然后我会存储转换,更改LCD显示的内容,拍照,执行相同的转换,并获得现在显示的内容的理想视图。 我想知道这听起来是个好主意吗? 有没有更简单的方法来实现我想要做的事情? 关于函数的任何提示我应该用来计算转换,执行它们,存储它们(可能只是将转换矩阵保存在内存中或将它们写入文件)等等?

OpenCV 2.1:运行时错误

我有一个使用OpenCV的程序。 我有一个网络摄像头,它捕获彩色帧,我想将彩色帧转换为灰度帧。 所以,我使用了cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); 将颜色帧转换为BW帧。 使用此颜色 – >灰度转换函数时,我得到一个运行时错误: OpenCV Error: Null pointer (NULL array pointer is passed) in unknown function, file ..\..\..\..\ocv\opencv\src\cxcore\cxarray.cpp, line 2376 以前有人遇到过这个问题吗 任何解决方案如何解决此问题? 谢谢 我的计划 #include #include #include #include #include”cv.h” #include”highgui.h” #include”cxtypes.h” #define ERROR -1 #define NO_ERROR 1 int main() { int EXIT_STATUS = NO_ERROR; int camera_index = 0; CvCapture *capture […]

复制非矩形roi opencv

我想用C ++ opencv复制一个非矩形图像的一部分。 零件的角点在图像中是已知的。 我想将它粘贴在精确位置的另一张图像中。 有人可以帮帮我吗? 源图像和目标图像具有相同的大小。 这是一个源图像的例子,我知道p1,p2,p3,p4,我想将该部分复制到一个新图像。 我已经有了一个目标图像。 例如,下面的图像是目标图像,我想仅将源图像的标记部分粘贴到目标图像。 我该怎么做? 最终输出看起来应该是这样的。 谢谢,

OpenCV中的位移贴图filter

我很想知道如何使用OpenCV实现此处演示的效果 。 我认为它是某种位移贴图滤镜,但我不是100%肯定。 在该页面完全加载后,移动鼠标以查看背景图像移动(这是我正在寻找的效果)。 可能吗? 我该怎么做呢? 注意 :此处还有另一页显示相同的效果 。

在OpenCV中使用自定义相机(通过GStreamer)

我正在使用Nitrogen6x板和ov5640相机(mipi)。 相机没有使用标准v4l / v4l,但我们可以使用GStreamer为其驱动程序(mfw_v4l)流式传输video: gst-launch mfw_v4lsrc ! autovideosink 我想通过GStreamer(OpenCV内部的GStreamer)调用OpenCV中的相机。 我在这里问了一个关于在OpenCV中调用GStreamer的问题,这是后续的。 如果我启用GStreamer支持,则会在源代码中检查它,但OpenCV会尝试使用标准V4L / V4L2作为GStreamer,我想要更改它。 有关调用GStreamer的部分位于cap_gstreamer.cpp中 : CvCapture* cvCreateCapture_GStreamer(int type, const char* filename ) { CvCapture_GStreamer* capture = new CvCapture_GStreamer; if( capture->open( type, filename )) return capture; delete capture; return 0; } 我想这是我应该以某种方式指向相机驱动程序的部分。 (“type”这里可能是一个与驱动程序相关的数字(在precomp.hpp中定义),但是什么是“文件名”?) 有关如何通过GStreamer访问相机的任何建议都会有所帮助和赞赏。 谢谢!

如何在OpenCV中设置ROI?

我有两个图像,第一个比另一个小。 我需要在第一张图片上复制第二张图片。 为此,我需要在第一个上设置ROI,将第二个图像复制到第一个上,然后重置ROI。 但是我使用C ++接口,所以我不知道如何做到这一点。 在CI中可以使用cvSetImageROI,但这在C ++接口上不起作用。 那么基本上cvSetImageROI的C ++替代品是什么? //output is a pointer to the mat whom I want the second image (colourMiniBinMask) copied upon Rect ROI (478, 359, 160, 120); Mat imageROI (*output, ROI); colourMiniBinMask.copyTo (imageROI); imshow (“Gravity”, *output);

使用鼠标从video上的矩形设置ROI

我有video,当程序运行时,video的第一帧被视为图像,并允许用户在图像上绘制矩形,在绘制矩形后,用户必须右键单击图像以确认矩形。 当鼠标右键单击时,图像消失,video开始播放,其上绘制的矩形。 我能够完美地绘制矩形,但我无法将该矩形设置为ROI。 我想要做的是将该矩形设置为感兴趣区域(ROI),以对该ROI进行一些图像处理。 我无法将我绘制的矩形设置为ROI。 我在Visual Studio 2010中使用OpenCV。稍后我将尝试将此程序集成到QT创建器中。 任何帮助,将不胜感激。 提前致谢。 我的完整代码如下: #include #include #include #include #include #include #include #include #include using namespace cv; using namespace std; void my_mouse_callback( int event, int x, int y, int flags, void* param ); bool destroy=false; CvRect box; IplImage* image; IplImage* frame2; bool drawing_box = false; void draw_box( IplImage* img, […]

OpenCV:处理每一帧

我想编写一个使用OpenCV进行video捕获的跨平台应用程序。 在所有示例中,我发现使用抓取function处理来自摄像机的帧并等待一段时间。 我想处理序列中的每一帧。 我想定义我自己的回调函数,每当新的框架准备好被处理时,它就会被执行(就像在Windows的directshow中,当您为了这些目的定义和放入图形时你自己的filter)。 所以问题是:我怎么能这样做?

OpenCv 2.3 C – 如何隔离图像内的对象

我有一个像这样的图像: 我想删除数字周围的黑色行和列。 所以我想要的结果是: 我试试这个: void findX(IplImage* imgSrc,int* min, int* max){ int i; int minFound=0; CvMat data; CvScalar maxVal=cvRealScalar(imgSrc->width * 255); CvScalar val=cvRealScalar(0); //For each col sum, if sum < width*255 then we find the min //then continue to end to search the max, if sum< width*255 then is new max for (i=0; iwidth; i++){ cvGetCol(imgSrc, […]