gpt4 book ai didi

opencv - 如何使用 OpenCV 从点获取轮廓

转载 作者:太空宇宙 更新时间:2023-11-03 21:47:52 25 4
gpt4 key购买 nike

我正在尝试使用 VC++ 和 OpenCV 从图像中获取 ROI。我设法显示图像,单击它时获取点的坐标,将这些坐标存储在矢量中并在图像上的这些点之间画线。这是我的代码:

//Includes
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <stdio.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

static int app;
static vector<Point2f> cont(6);
static Mat img = imread("C:/img.jpg",0);

void on_mouse(int, int, int, int, void* );

int main()

{
app = 0;
namedWindow("myWindow", CV_WINDOW_AUTOSIZE);
cvSetMouseCallback("myWindow", on_mouse, 0);
imshow("myWindow", img);
waitKey(0);
}

void on_mouse(int evt, int x, int y, int flags, void* param)
{

if(evt == CV_EVENT_LBUTTONDOWN)
{
Point pt(x,y);
if(app<6)
{
cont[app]=pt;
app++;
}


cout<<"Coordonnees du point pt : "<<x<<","<<y<<endl;
for (int i=0; i<6;i++)
{cout<<cont[i]<<endl;}
}
if(evt == CV_EVENT_RBUTTONDOWN)
{
for (int j=0;j<5;j++)
{
line(img,cont[(j)],cont[(j+1)],CV_RGB(255,0,0),2);
}
line(img,cont[(5)],cont[(0)],CV_RGB(255,0,0),2);
imshow("myWindow", img);

}
}

我想要获得的是一个向量,它包含轮廓所有点的坐标,最终是一个二元矩阵,其大小为我的图像大小,如果像素不在轮廓中,则为 0,否则为 1。感谢您的帮助。

最佳答案

制作单个元素vector< vector< Point> >然后将 drawContours 与 CV_FILLED 一起使用。然后你就会得到你想要的二进制矩阵。

我目前没有IDE,但代码如下

vector< vector< Point> > contours;
contours.push_back(cont);//your cont
Mat output(img.rows,img.cols,CV_8UC1);//your img
drawContours(output, contours, 0, Scalar(1), CV_FILLED);//now you have binary image

关于opencv - 如何使用 OpenCV 从点获取轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com