旋转视频OpenCV C++
我尝试将摄像机的视频旋转90度,我尝试使用cvTranspose和cvFlip,但结果是:旋转视频OpenCV C++,c++,opencv,C++,Opencv,我尝试将摄像机的视频旋转90度,我尝试使用cvTranspose和cvFlip,但结果是: Unhandled exception at 0x752bc41f in CameraStero.exe: Microsoft C++ exception: cv::Exception at memory location 0x0021faf8.. 这是我的密码 #include <opencv\cv.h> #include <opencv\highgui.h> using n
Unhandled exception at 0x752bc41f in CameraStero.exe: Microsoft C++ exception: cv::Exception at memory location 0x0021faf8..
这是我的密码
#include <opencv\cv.h>
#include <opencv\highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap1;
cap1.open(0);
cap1.set(CV_CAP_PROP_FPS, 0.55);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 800.0);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 800.0);
Mat img1, img2;
for(;;){
CvCapture* cap;
IplImage* frame;
cap = cvCreateCameraCapture( 0 );
cvGrabFrame(cap);
frame=cvRetrieveFrame(cap);
cvTranspose(frame, frame);
cvFlip(frame, frame, 1);
cvShowImage("Img1", frame);
if(waitKey(1)=='q')
break;
}
}
有什么建议可以修改代码吗? < P>你正在混合OpenCV C++和C接口。这里是如何在OpenCV/C中完成的
#include <opencv\cv.h>
#include <opencv\highgui.h>
int main(int argc, char** argv)
{
CvCapture* cap = cvCreateCameraCapture( 0 );
for(;;)
{
IplImage* frame=cvQueryFrame(cap);
cvTranspose(frame, frame);
cvFlip(frame, frame, 1);
cvShowImage("Img1", frame);
if(waitKey(30)=='q')
break;
}
cvReleaseCapture(cap);
}
您应该保留默认的捕获参数,因为如果相机不支持您的设置,可能会导致错误。因此,删除以下行:
cap1.set(CV_CAP_PROP_FPS, 0.55);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 800.0);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 800.0);
或者,如果确实需要更改宽度和高度,则应确保要设置的宽度/高度应小于默认值。以下代码也可以使用:
cap1.set(CV_CAP_PROP_FPS, 0.55);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
就像@SRF所说的,您混淆了OpenCV C/C++接口,所以您可以使用
cap = cvCreateCameraCapture( 0 );
或
,但不是两者都有
如果要在一个窗口中显示捕获的图像,应首先通过以下方式创建窗口:
cv::namedWindow("Img1", 1);
不要忘记返回0;在int main中。虽然某些编译器不限制这一点,但您应该始终这样做
修复所有这些问题后,代码应该看起来像这样在我的电脑上运行良好:
int main()
{
VideoCapture cap1;
cap1.open(0);
cap1.set(CV_CAP_PROP_FPS, 0.55);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
cv::namedWindow("Img1", 1);
Mat frame;
for(;;)
{
Mat frame;
cap1 >> frame;
transpose(frame, frame);
flip(frame, frame, 1);
imshow("Img1", frame);
if(waitKey(1)=='q')
break;
}
cap1.release();
return 0;
}
谢谢你的帮助。这是可行的,但我需要设置帧宽度和高度,我尝试使用“cap1.setCV\u CAP\u PROP\u frame\u width,800.0;”同样适用于高度,但大小没有改变。@Limavolt更新了关于如何正确设置宽度/高度的答案。非常感谢您的帮助,我是opencv的新手
int main()
{
VideoCapture cap1;
cap1.open(0);
cap1.set(CV_CAP_PROP_FPS, 0.55);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
cv::namedWindow("Img1", 1);
Mat frame;
for(;;)
{
Mat frame;
cap1 >> frame;
transpose(frame, frame);
flip(frame, frame, 1);
imshow("Img1", frame);
if(waitKey(1)=='q')
break;
}
cap1.release();
return 0;
}