小编xpe*_*oni的帖子

如何在Google Colaboratory的VM中安装额外的软件包?

我正在玩Google Colaboratory,并注意到tqdm没有预装的蝙蝠.有没有办法安装额外的包?

google-colaboratory

14
推荐指数
1
解决办法
1万
查看次数

从std :: istreambuf_iterator创建std :: string,奇怪的语法怪癖

我找到了以下用于将文件读入字符串的习惯用法:

std::ifstream file("path/to/some/file.ext");
std::string contents(
    std::istreambuf_iterator<char>(file),
    (std::istreambuf_iterator<char>())
);
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好.但是,如果我删除第二个迭代器参数周围的括号,那就是:

std::string contents(
    std::istreambuf_iterator<char>(file),
    std::istreambuf_iterator<char>()
);
Run Code Online (Sandbox Code Playgroud)

一旦我尝试在字符串对象上调用任何方法,例如:

const char *buffer = contents.c_str();
Run Code Online (Sandbox Code Playgroud)

我收到表单的编译错误:

error: request for member 'c_str' in 'contents', which is of non-class type 'std::string(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> > (*)()) {aka std::basic_string<char>(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> > (*)())}'

此外,如果我尝试将该字符串分配给另一个:

std::string contents2 = contents;
Run Code Online (Sandbox Code Playgroud)

我收到表单错误:

error: conversion from 'std::string(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> > (*)()) {aka std::basic_string<char>(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> > (*)())}' to non-scalar type 'std::string {aka std::basic_string<char>}' requested

为什么是这样?我看不出需要这些括号的原因,更不用说影响 …

c++ stl

10
推荐指数
1
解决办法
2688
查看次数

如何填充触摸图像边框的轮廓?

假设我从输出中创建了以下二进制图像cv::watershed():

在此输入图像描述

现在我想找到并填充轮廓,因此我可以将相应的对象与原始图像中的背景分开(由分水岭函数分割).

要分割图像并找到轮廓,我使用下面的代码:

cv::Mat bgr = cv::imread("test.png");

// Some function that provides the rough outline for the segmented regions.
cv::Mat markers = find_markers(bgr); 

cv::watershed(bgr, markers);

cv::Mat_<bool> boundaries(bgr.size());
for (int i = 0; i < bgr.rows; i++) {
    for (int j = 0; j < bgr.cols; j++) {
        boundaries.at<bool>(i, j) = (markers.at<int>(i, j) == -1);
    }
}

std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;

cv::findContours(
    boundaries, contours, hierarchy,
    CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE
);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,如果我将上面获得的轮廓传递给cv::drawContours()如下:

cv::Mat regions(bgr.size(), CV_32S);
cv::drawContours(
    regions, contours, -1, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

8
推荐指数
2
解决办法
6818
查看次数

标签 统计

c++ ×2

google-colaboratory ×1

opencv ×1

stl ×1