使用cvShowImage
,可以在OpenCV中轻松显示图像.但是,您如何告诉OpenCV在每个其他窗口的顶部显示窗口?
我在显示图像的同时运行全屏OpenGL应用程序.第一次OpenCV窗口弹出我的应用程序窗口,但如果我点击我的应用程序的窗口(即重点关注它),那么我无法让OpenCV回到顶部OpenGL窗口,即使在销毁和重新创建窗口时也是如此.
我想过每次重命名窗口,但还有另一种方法吗?
我想让Gtk +窗口的背景透明,以便只有窗口中的窗口小部件可见.我找到了一些教程:
http://mikehearn.wordpress.com/2006/03/26/gtk-windows-with-alpha-channels/
http://macslow.thepimp.net/?p=26
但他们似乎都在听"揭露"事件,然后委托开罗进行渲染.这意味着不会渲染添加到窗口的其他窗口小部件(例如,我也尝试向窗口添加按钮).
我看到GtkWidget上有一个方法modify-bg:http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-modify-bg
但是,GdkColor似乎不接受透明度参数:http://library.gnome.org/devel/gdk/stable/gdk-Colormaps-and-Colors.html
我也尝试了GtkWindow.set_opacity方法,但这也设置了窗口内容的不透明度,这不是我想要的.
我很感激任何人都可以提供的任何指导.
我有一个33秒的视频,我正在尝试使用OpenCV处理.我的目标是确定每个帧对应的时间实例(相对于视频的开头).我这样做是为了能够比较以不同帧速率录制的同一场景的视频中的帧.
什么工作:
ffprobe
报告一致,所以我很高兴相信这是正确的.我遇到的问题是:
CAP_PROP_POS_MSEC
返回不正确的值.截至视频结束时,最高可达557924毫秒(超过9分钟).对于33s的视频,这可能不对.CAP_PROP_FRAME_COUNT
也是不正确的.它被报道为33371,以59.75 fps的速度拍摄超过9分钟的镜头.与上述错误一致,但仍然不正确.CAP_PROP_POS_FRAME
同样不正确.视频可以在这里找到(大约10MB).
关于什么可能出错的任何想法?
ffprobe
输出:
FFprobe version SVN-r20090707, Copyright (c) 2007-2009 Stefano Sabatini
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 1
libavformat 52.31. 0 / 52.31. 0
built on Jan 20 2010 00:13:01, gcc: 4.4.3 20100116 (prerelease)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/misha/Dropbox/Public/sequence.mp4':
Duration: 00:00:33.37, start: 0.000000, bitrate: 2760 kb/s
Stream #0.0(und): Video: h264, yuv420p, 1920x1080, 59.75 tbr, 1k tbn, 2k tbc
Stream …
Run Code Online (Sandbox Code Playgroud) 我一直在玩OpenCV,并且有很多试验和错误已经设法学习如何检测照片中的圆圈(硬币).一切都很好,除非我直接将硬币放在一起(如下所示,忽略了第二张图像倒置的事实).
看起来因为硬币是如此接近,cvFindContours认为它们是同一个对象.我的问题是如何将这些轮廓分成单独的对象,或者获得已经分离的轮廓列表.
我用于cvFindContours的参数是:
cvFindContours( img, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0) );
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议将不胜感激.
在Ubuntu 10.10(Pentium 4 2.80GHz)上尝试使用QtMobility 1.2.0和Qt 4.7.4播放视频时,我看到了糟糕的表现.
有趣的是图腾(也使用gstreamer作为后端)和vlc能够在这台机器上播放这些视频,即使分辨率更高(全屏等).
根据顶部,我的应用程序消耗100%的CPU,而图腾和vlc仅消耗约40%.那真是怪了!所以我在下面分享了应用程序的源代码.它使用QMediaPlayer
并QVideoWidget
完成工作.
movie.cpp:
#include <QtGui/QMainWindow>
#include <QtGui>
#include <qmediaplayer.h>
#include <qvideowidget.h>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QMainWindow mainWindow;
mainWindow.resize(QSize(1280, 500));
QMediaPlayer* mplayer = new QMediaPlayer;
QVideoWidget* vid_widget = new QVideoWidget(&mainWindow);
vid_widget->setAspectRatioMode(Qt::IgnoreAspectRatio);
mainWindow.setCentralWidget(vid_widget);
mplayer->setVideoOutput(vid_widget);
mplayer->setMedia(QUrl::fromLocalFile(argv[1]));
mplayer->setVolume(50);
mplayer->setPlaybackRate(1);
mplayer->play();
mainWindow.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
movie.pro:
TEMPLATE = app
QT …
Run Code Online (Sandbox Code Playgroud) 我正在使用OpenCV 2.4.3来读写视频文件.我的代码是这样的:
cv::VideoCapture video;
video.open ( "D:\\testVideo.avi" );
cv::VideoWriter output;
output.open ( "D:\\outputVideo.avi", CV_FOURCC('D','I','V','X'), 120, cv::Size ( 1200,1600), true );
cv::Mat img;
for ( int n = 0; ; n ++ )
{
video >> img;
output.write ( img );
}
Run Code Online (Sandbox Code Playgroud)
然后结果视频是一个空文件,我无法打开它.我在这做错了什么?
我正在使用opencv,我想从另一个图像的一部分创建一个图像.
我没有找到这样做的功能,所以我尝试实现我的想法,包括逐像素地复制图像但是徒劳无法得到我正在等待的结果.
任何人都有另一个想法
码:
#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc,char** argv) {
IplImage * img =0;
uchar *data;
int i,j,k;
int height,width,widthStep,nChannels;
img=cvLoadImage(argv[1],3);
height =img->height;
width = img->width;
widthStep= img->widthStep;
nChannels = img->nChannels;
data=(uchar*)img->imageData;
IplImage* img1=cvCreateImage(cvSize(height/2,width/2),IPL_DEPTH_8U,nChannels);
for(i=0;i<height/2;i++){
for(j=0;j<width/2;j++){
for(k=0;k<3;k++){
img1->imageData[i*widthStep+j*nChannels]=data[i*widthStep+j*nChannels];
}
}
}
cvShowImage("image_Originale2",img1);
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 嗨,我想用opencv告诉我空白图像的像素值,所以输出看起来像这样
10001
00040
11110
00100
Run Code Online (Sandbox Code Playgroud)
这是我当前的代码,但我不知道如何访问CV_GET_CURRENT
调用的结果..任何帮助?
IplImage readpix(IplImage* m_image) {
cout << "Image width : " << m_image->width << "\n";
cout << "Image height : " << m_image->height << "\n";
cout << "-----------------------------------------\n";
CvPixelPosition8u position;
CV_INIT_PIXEL_POS(position, (unsigned char*)(m_image->imageData), m_image->widthStep, cvSize(m_image->width, m_image->height), 0, 0, m_image->origin);
for(int y = 0; y < m_image->height; ++y) // FOR EACH ROW
{
for(int x = 0; x < m_image->width; ++x) // FOR EACH COL
{
CV_MOVE_TO(position, x, y, 1);
unsigned char colour = …
Run Code Online (Sandbox Code Playgroud) 场景是这样的:我有一张纸的图片,我想做一些OCR.因此,请将下面的图片作为我的输入示例:
在成功检测到与纸张对应的区域后,我留下了vector<Point>
4个坐标,这些坐标定义了图像内部的位置.请注意,由于摄像机的距离和拍摄照片时的角度,这些坐标可能与完美的矩形不对应.出于查看目的,我连接了子图像中的点,以便您可以看到我的意思:
在这种情况下,要点是:[1215,43],[52,67],[56,869]和[1216,884]
此时,我需要调整这些点,使它们水平对齐.那是什么意思?如果您注意到上面子图像的区域,则会稍微旋转:图像右侧的点位置略高于另一侧的点.
换句话说,我们有图像A,它被夸大了,看起来比现实更加扭曲/旋转,然后是图像B - 这就是我想要的最终结果:
一个) B)
我不确定可以使用哪种技术来实现这种转换.应用程序还需要自动检测需要完成多少旋转,因为我无法控制图像采集过程.
目的是Mat
使用标准化的子图像获得新的.我现在并不担心可能的图像失真,我只是想找到一种方法来确定需要对子图像进行多少旋转以及如何应用它并获得更矩形的区域.
opencv ×8
c ×6
c++ ×6
video ×3
background ×1
geometry ×1
gtk ×1
performance ×1
pixel ×1
qt ×1
qt-mobility ×1
rotation ×1
transparent ×1
window ×1