我有一个包含正方形的图像,我需要提取该正方形中包含的区域.在应用了square.c脚本(在每个OpenCV分布的样本中可用)后,我获得了一个正方形向量,然后我需要为它们中的每个保存一个图像.
用户karlphillip建议:
for (size_t x = 0; x < squares.size(); x++)
{
Rect roi(squares[x][0].x, squares[x][0].y,
squares[x][1].x - squares[x][0].x,
squares[x][3].y - squares[x][0].y);
Mat subimage(image, roi);
}
Run Code Online (Sandbox Code Playgroud)
为了在原始图像中检测到的所有方块生成一个称为子图像的新Mat
正如卡尔记得的那样,图像中检测到的点可能并不代表一个完美的正方形(如上图所示),但我刚给你建议的代码假设他们这样做了.
实际上我收到了这个错误:
OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width &&
roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height &&
roi.y + roi.height <= m.rows) in Mat, file /usr/include/opencv/cxmat.hpp,
line 187
terminate called after throwing an instance of 'cv::Exception'
what(): /usr/include/opencv/cxmat.hpp:187: error: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个QML插件,它从视频中读取帧(使用自定义小部件来完成该任务,而不是QtMultimedia/Phonon),每个帧都转换为QImageRGB888,然后显示在a QGLWidget(出于性能原因) .现在屏幕上没有任何东西,屏幕始终保持白色.
重要的是要声明我已经完成了所有这些工作QGLWidget,所以我知道问题是设置和绘制QGLWidget.
该插件正在注册:
qmlRegisterType<Video>(uri,1,0,"Video");
Run Code Online (Sandbox Code Playgroud)
Video插件的主要类也是如此.在它的构造函数上我们有:
Video::Video(QDeclarativeItem* parent)
: QDeclarativeItem(parent), d_ptr(new VideoPrivate(this))
{
setFlag(QGraphicsItem::ItemHasNoContents, false);
Q_D(Video);
QDeclarativeView* view = new QDeclarativeView;
view->setViewport(&d->canvas()); // canvas() returns a reference to my custom OpenGL Widget
}
Run Code Online (Sandbox Code Playgroud)
在我跳转到canvas对象之前,让我说我重载Video::paint()所以它canvas.paint()在QImage作为参数传递时调用,我不知道这是否是正确的方法,所以我想对此提出一些建议:
void Video::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
Q_UNUSED(painter);
Q_UNUSED(widget);
Q_UNUSED(option);
Q_D(Video);
// I know for sure at this point "d->image()" is valid, but I'm hiding the code …Run Code Online (Sandbox Code Playgroud) 我一直在使用QtCreator进行OpenCV,但是一个与朋友一起开始的新项目需要用eclipse完成.
我做了我通常用QtCreator做的所有事情,但我遇到了一个奇怪的问题.虽然我在尝试编译时确实设置了包含路径(/ home/opencv/include)但是我发现错误标题的错误(即opencv2/core/core.hpp).在include标记下的项目资源管理器中,显示的唯一标题是包含目录的第一级中的标题.这意味着cdt不会递归地包含标头.
这是一个错误还是我必须包含每个目录?

我已经发布了一些关于释放所有IplImage和所有CvMat结构的帖子CvMemStorage,但是我仍有一些内存问题.
我是否也将发布CvPoint,CvScalar,CvPoint*(排列3个CvPoints,我一定要释放的每个元素吗?)
如果我必须释放所有这些东西,我该怎么办?我没有找到任何功能.我在C/C++中使用OpenCV 2.1.
以下是我如何声明它们:
CvScalar b1;
CvScalar f;
float *data=(float*)resd->imageData; (need to release data)
CvPoint *point;
CvPoint pt;
CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));
Run Code Online (Sandbox Code Playgroud) 今天我试图解决Facebook编程挑战.我得到的挑战是"酒吧问题",可以在这里找到.在挑战过程中我遇到的问题是要了解他们提供的第一个例子.
问题可归纳如下:
N个朋友正在玩游戏.他们每个人都有自己面前的数字列表.
N个朋友中的每一个从他的列表中选择一个号码并将其报告给游戏管理员.然后游戏管理员对报告的数字进行排序并喊出第K个最大的数字.
你想知道游戏管理员可以喊出的所有可能的数字.
到那时我认为我已经理解了这个问题,但后来他们提出了以下例子:
在给出的示例示例中,对于第一个测试用例,N = 3且K = 3.第一个人的列表是{2 5 3},第二个人的列表是{8 1 6},第三个是{7 4 9}.在这种情况下,{4,5,6,7,8,9}中的所有数字都有机会成为第三大选定数字.
所以我的问题是:
7,8和9如何成为第三大选定数字?
在我看来,只有数字{1,2,3,4,5}可以是第三大数字,但也许我误解了算法.
我是新的opencv.我写一个删除背景.
我的输入图片
我将我的程序编码为以下步骤:
- 计算平均像素
//define roi of image
cv::Rect roi(0, 0, 20 , 20 );
//copies input image in roi
cv::Mat image_roi = imgGray( roi );
//imshow("roi", image_roi);
//computes mean over roi
cv::Scalar avgPixelIntensity = cv::mean( image_roi );
//prints out only .val[0] since image was grayscale
cout << "Pixel intensity over ROI = " << avgPixelIntensity.val[0] << endl;
Run Code Online (Sandbox Code Playgroud)
- 根据平均像素值创建新的Mat图像:
//create new mat image base on avgPixelIntensity
cv::Mat areaSampleArv(imgGray.rows, imgGray.cols,imgGray.type(),avgPixelIntensity.val[0]);
imshow("areaSampleArv", areaSampleArv);
Run Code Online (Sandbox Code Playgroud)
- 反转图片:
void image_invert(Mat& image){
int height, …Run Code Online (Sandbox Code Playgroud) 如何找出 cuda 内核在运行时使用的寄存器数量?我知道如何在编译过程中查找信息,但我不想在其中对数字进行硬编码
谢谢
我有一个程序,我在GPU上进行了一系列计算,然后我在CPU上执行这些结果的内存操作,然后我接下来的批处理数据并全部执行相同操作.现在,如果我可以进行第一组计算,然后从第二批开始,而我的CPU在内存操作中搅拌,那将会快得多.我该怎么办?
我正在尝试在Ubuntu 11.04上安装Open-CV库.
我按照InstallationGuide中的所有说明进行操作.
但是在成功安装后我意识到我没有FFMPEG支持,因为在我的配置文件中FFMPEG被禁用了:
Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES
-- FFMPEG: NO
-- codec: YES
-- format: YES
-- util: YES
-- swscale: NO
-- gentoo-style: YES
-- GStreamer: YES
-- UniCap: NO
-- PvAPI: NO
-- V4L/V4L2: Using libv4l
-- Xine: NO
Run Code Online (Sandbox Code Playgroud)
所以我尝试在安装FFMEPG之后重建所有内容,如此处所述.
使用该指令配置安装后
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ../OpenCV-2.3.1
Run Code Online (Sandbox Code Playgroud)
我运行make命令得到这个错误:
make[2]: *** [bin/opencv_test_calib3d] Error 1
make[1]: *** [modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2
make: *** [all] …Run Code Online (Sandbox Code Playgroud) 我尝试加载图片:
File root = Environment.getExternalStorageDirectory();
File file = new File(root, "image.gif");
Mat m = Highgui.imread(file.getAbsolutePath());
if(file.exists()){
showToast("Height: " + m.height() + " Width: " + m.width());
}
Run Code Online (Sandbox Code Playgroud)
但是大小= 0(高度/宽度).