小编Og *_*dik的帖子

OpenCV关闭一个形状并填充它

我想输出一个蓝色的手,但得到不正确的输出.我已经包含输入图片,错误的输出图片和下面的代码.

我认为下面的代码不会填满整个图像,因为图像在右边界尚未关闭.

如何关闭形状并正确填充蓝色?

紧密的形状

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;
using namespace std;

void drawStuff();
void showInputWindow();
void showCannyWindow();
void showContourWindow();

int thresh = 40;
int max_thresh = 120;
Mat img_rgb,img_gray,img_bw,canny_output,drawing;

int main(){
    img_rgb  = imread("qq.jpg");
    blur( img_rgb, img_rgb, Size(3,3) );
    cvtColor(img_rgb,img_gray,CV_RGB2GRAY);
    showInputWindow();

    drawStuff();
    cv::waitKey(0);
}

void drawStuff(){
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

    Canny( img_gray, canny_output, thresh, thresh*2, 3 );
    cv::dilate(canny_output, canny_output, cv::Mat(), cv::Point(-1,-1));
    showCannyWindow();

    findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv shape contour fill

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

来自Mat图像的OpenCV子图像

可能重复:
了解openCV 2.4中感兴趣的区域

我想从图像(Mat格式)获得一个子图像(由下面的红框限定).我该怎么做呢?

在此输入图像描述

这是我目前的进展:

include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
int main()
{
    Mat imgray, thresh;
    vector<vector<Point> >contours;
    vector<Point> cnt;
    vector<Vec4i> hierarchy;
    Point leftmost;

    Mat im = imread("igoy1.jpg");
    cvtColor(im, imgray, COLOR_BGR2GRAY);
    threshold(imgray, thresh, 127, 255, 0);
    findContours(thresh, contours, hierarchy, RETR_TREE,CHAIN_APPROX_SIMPLE);
}
Run Code Online (Sandbox Code Playgroud)

c++ opencv image image-processing contour

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

OpenCV皮肤检测

我一直在做一些皮肤检测,但无法顺利进行.下面的图像包含输入(左)和输出(右),使用下面附带的代码.现在,所需的输出应该是最底部的图像(边缘光滑且没有孔的图像).我如何实现此输出?从哪里开始的示例代码将有很大帮助.

输入(左)和不正确的输出(右):

在此输入图像描述

期望的输出:

在此输入图像描述

用于生成Incorect输出的代码:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main(){
    Mat src = imread("qq.jpg");
    if (src.empty())
        return -1;
    blur( src, src, Size(3,3) );
    Mat hsv;
    cvtColor(src, hsv, CV_BGR2HSV);
    Mat bw;
    inRange(hsv, Scalar(0, 10, 60), Scalar(20, 150, 255), bw);
    imshow("src", src);
    imshow("dst", bw);
    waitKey(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

修改后的代码(在Astor的建议之后):(现在的问题是:你如何平滑输出?)

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int findBiggestContour(vector<vector<Point> >);

int main(){
    Mat src = imread("qq.jpg");
    if (src.empty())
        return -1;
    blur( src, src, Size(3,3) );

    Mat hsv;
    cvtColor(src, hsv, CV_BGR2HSV); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv skin flood-fill

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

OpenCV的C++ Canny边缘检测

我想提取手的边缘,但我得到以下结果.我已经尝试调整低和高阈值,但我仍然无法获得所需的输出.我在下面列出了代码及其输出.什么似乎是问题?

这是由下面的代码生成的输出图像.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(){

    cv::Mat image= cv::imread("open_1a.jpg");
    cv::Mat contours;
    cv::Mat gray_image;

    cvtColor( image, gray_image, CV_RGB2GRAY );

    cv::Canny(image,contours,10,350);

    cv::namedWindow("Image");
    cv::imshow("Image",image);

    cv::namedWindow("Gray");
    cv::imshow("Gray",gray_image);

    cv::namedWindow("Canny");
    cv::imshow("Canny",contours);
    cv::waitKey(0);
}
Run Code Online (Sandbox Code Playgroud)

c++ opencv contour edge-detection

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

7
推荐指数
1
解决办法
4509
查看次数

OpenCV Mat处理时间

我想知道OpenCV函数的src(source)和dst(destination)是否有不同的变量会对处理时间产生影响.我在下面有两个函数可以做同样的事情.

public static Mat getY(Mat m){
    Mat mMattemp = new Mat();
    Imgproc.cvtColor(m,mMattemp,Imgproc.COLOR_YUV420sp2RGB);
    Imgproc.cvtColor(mMattemp,mMattemp, Imgproc.COLOR_RGB2HSV);
    Core.inRange(mMattemp, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mMattemp);
    return mMattemp;
}
Run Code Online (Sandbox Code Playgroud)

public static Mat getY(Mat m){
    Mat mMattemp_rgb = new Mat();
    Mat mMattemp_hsv = new Mat();
    Mat mMattemp_ir = new Mat();
    Imgproc.cvtColor(m,mMattemp_rgb,Imgproc.COLOR_YUV420sp2RGB);
    Imgproc.cvtColor(mMattemp_rgb,mMattemp_hsv, Imgproc.COLOR_RGB2HSV);
    Core.inRange(mMattemp_hsv, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mMattemp_ir);
    return mMattemp_ir;
}
Run Code Online (Sandbox Code Playgroud)

哪两个更好?一个优于另一个的优势是什么?

java android opencv image-processing matrix

5
推荐指数
1
解决办法
2712
查看次数

OpenCV图像为黑白形状

我希望手形图像是手的黑白形状.这是输入和所需输出的示例:手黑白http://imageshack.us/a/img853/4017/handtobw.jpg

使用阈值不会产生所需的输出,因为手内的一些颜色与背景颜色相同.我怎样才能获得所需的输出?

c++ opencv image image-processing shapes

4
推荐指数
1
解决办法
3295
查看次数