- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图在 OpenCV 中使用 SLIC 分割图像。我正在尝试使用以下功能:
void vl_slic_segment ( vl_uint32 * segmentation,
float const * image,
vl_size width,
vl_size height,
vl_size numChannels,
vl_size regionSize,
float regularization,
vl_size minRegionSize
)
#include 很好,链接到库也很好。我只需要知道如何将图像传递给此函数。此函数中的图像参数是 float const *
类型,我不知道如何将图像转换为这种类型。
下面是我如何将图像加载到代码中:
IplImage *image = cvLoadImage("train.tif", 1);
这里是完整的代码:
extern "C" {
#include </home/me/Downloads/vlfeat-0.9.17/vl/slic.h>
}
#include <stdio.h>
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include<opencv/highgui.h>
using namespace std;
using namespace cv;
int main () {
IplImage *image = cvLoadImage("train.tif", 1);
vl_uint32 * seg;
vl_slic_segment(seg,(const float *)image,image->width,image->height,image->nChannels,15,0.1,1);
waitKey(0);
}
而且我不知道我是否正确使用了 vl_uint32 * seg
。如果有人有示例或示例代码来执行此 segmentation ,请。
谢谢!!
最佳答案
您需要为seg
正确分配存储空间。如果您打算像 berak 的回答中那样使用 C++ API(我也建议这样做),您可以创建一个 Mat
来保存标签数据,以便以后更轻松地访问并自动管理内存:
cv::Mat labels(floatimg.size(), CV_32SC1); // Mat doesn't support 32-bit unsigned directly, but this should work fine just to hold data.
vl_slic_segment(labels.ptr<vl_uint32>(),floatimg.ptr<float>(),floatimg.cols,floatimg.rows,floatimg.channels(),15,0.1,1);
如果出于某种原因您不想这样做,您可以像这样分配一 block 原始内存(不推荐):
vl_uint32* seg = new vl_uint32[floatimg.total()]; // don't forget to delete[]
或者如果您决定继续使用 C API,您可以使用 malloc
(真的不推荐):
vl_uint32* seg = (vl_uint32*)malloc(img->height * img->width); // don't forget to free()
关于c++ - SLIC c++ 分段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18468565/
我在同一张图片上运行 opencv 和 skimage 的 SLIC(简单线性迭代聚类)超像素算法,但得到了不同的结果,skimage slic 结果更好,如下图所示。第一个是 opencv SLIC
我需要计算云量的百分比。 SLIC分割后的图像如何计算?有人可以帮忙吗? segments_slic = slic(img, n_segments=250, compactness=10, sigma
我试图在 OpenCV 中使用 SLIC 分割图像。我正在尝试使用以下功能: void vl_slic_segment ( vl_uint32 * segmentation, flo
我正在尝试使用存储在 OpenCV Mat 中的输入图像来使用 VLFeat 库的 vl_slic_segment 函数。我的代码正在编译和运行,但输出的超像素值没有意义。到目前为止,这是我的代码:
这里是新手!我正在使用 python 加上 opencv 和 skimage 包。我使用以下超像素分割图像: segments = slic(image, n_segments=numSegments
我是一名优秀的程序员,十分优秀!