C++ 在C+中标记兴趣点+;
我的项目的目标是检测肺结节,经过过滤和分类后,我得到了如下二值图像: 我的问题是我不知道如何在原始图像上标记这些兴趣点。在matlab中,我可以使用[hold on-off]循环和一些plot()函数轻松实现。但是我如何在C++中做这件事,我不是要把MATLAB代码翻译成C++,我只需要用任何必要的标记来标记原始图像上的这些POI。 以下是我想要的结果: 我用Matlab做的 编辑:我已经从我的程序中得到了点的位置(正如你在第一幅图像中看到的),我只想在原始图像上绘制它们,就像第二幅图像一样 您是否尝试过:C++ 在C+中标记兴趣点+;,c++,matlab,opencv,C++,Matlab,Opencv,我的项目的目标是检测肺结节,经过过滤和分类后,我得到了如下二值图像: 我的问题是我不知道如何在原始图像上标记这些兴趣点。在matlab中,我可以使用[hold on-off]循环和一些plot()函数轻松实现。但是我如何在C++中做这件事,我不是要把MATLAB代码翻译成C++,我只需要用任何必要的标记来标记原始图像上的这些POI。 以下是我想要的结果: 我用Matlab做的 编辑:我已经从我的程序中得到了点的位置(正如你在第一幅图像中看到的),我只想在原始图像上绘制它们,就像第二幅图像一样
Mat image;
image = imread(filename, CV_LOAD_IMAGE_COLOR);
然后用在上面
在“可能”上,如果您不知道坐标,但您仅使用获得过滤后的图像,您是否尝试过:
Mat image;
image = imread(filename, CV_LOAD_IMAGE_COLOR);
然后用在上面
如果您不知道坐标,但使用获得过滤后的图像,请尝试以下操作
从二值图像中可以提取轮廓。
然后直接绘制轮廓,或者提取覆盖整个轮廓的边界圆
我将介绍这两种方法
int main()
{
cv::Mat input = cv::imread("../inputData/markMatlab.png");
cv::Mat gray;
cv::cvtColor(input, gray, CV_BGR2GRAY);
cv::Mat binaryImage = gray>0;
cv::imshow("binary image", binaryImage);
// here you start
std::vector<std::vector<cv::Point> > contours;
cv::findContours(binaryImage, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
// either this:
cv::Mat inputBlobs = input.clone(); // create output image
for(unsigned int i=0; i<contours.size(); ++i)
{
cv::Point2f blobCenter;
float blobRadius;
cv::minEnclosingCircle(contours[i], blobCenter, blobRadius);
cv::circle(inputBlobs, blobCenter, blobRadius, cv::Scalar(0,0,255), 2);
}
// or this one:
cv::Mat inputContours = input.clone(); // create output image
for(unsigned int i=0; i<contours.size(); ++i)
{
cv::drawContours(inputContours, contours, i, cv::Scalar(0,0,255), 2);
}
cv::imshow("input", input);
cv::imshow("input blobs", inputBlobs);
cv::imshow("input contours", inputContours);
cv::imwrite("../outputData/markMatlab.png", input);
cv::imwrite("../outputData/markMatlabBlobs.png", inputBlobs);
cv::imwrite("../outputData/markMatlabContours.png", inputContours);
cv::waitKey(0);
return 0;
}
intmain()
{
cv::Mat input=cv::imread(“../inputData/markMatlab.png”);
cv::席灰色;
cv::CVT颜色(输入,灰色,cv_bgr2灰色);
cv::Mat binaryImage=灰色>0;
cv::imshow(“二进制图像”,二进制图像);
//从这里开始
矢量轮廓;
cv::findContours(二值图像、等高线、cv\u RETR\u外部、cv\u链\u近似值\u无);
//或者:
cv::Mat inputBlobs=input.clone();//创建输出图像
对于(无符号整数i=0;i请尝试此
从二值图像中可以提取轮廓。
然后直接绘制轮廓,或者提取覆盖整个轮廓的边界圆
我将介绍这两种方法
int main()
{
cv::Mat input = cv::imread("../inputData/markMatlab.png");
cv::Mat gray;
cv::cvtColor(input, gray, CV_BGR2GRAY);
cv::Mat binaryImage = gray>0;
cv::imshow("binary image", binaryImage);
// here you start
std::vector<std::vector<cv::Point> > contours;
cv::findContours(binaryImage, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
// either this:
cv::Mat inputBlobs = input.clone(); // create output image
for(unsigned int i=0; i<contours.size(); ++i)
{
cv::Point2f blobCenter;
float blobRadius;
cv::minEnclosingCircle(contours[i], blobCenter, blobRadius);
cv::circle(inputBlobs, blobCenter, blobRadius, cv::Scalar(0,0,255), 2);
}
// or this one:
cv::Mat inputContours = input.clone(); // create output image
for(unsigned int i=0; i<contours.size(); ++i)
{
cv::drawContours(inputContours, contours, i, cv::Scalar(0,0,255), 2);
}
cv::imshow("input", input);
cv::imshow("input blobs", inputBlobs);
cv::imshow("input contours", inputContours);
cv::imwrite("../outputData/markMatlab.png", input);
cv::imwrite("../outputData/markMatlabBlobs.png", inputBlobs);
cv::imwrite("../outputData/markMatlabContours.png", inputContours);
cv::waitKey(0);
return 0;
}
intmain()
{
cv::Mat input=cv::imread(“../inputData/markMatlab.png”);
cv::席灰色;
cv::CVT颜色(输入,灰色,cv_bgr2灰色);
cv::Mat binaryImage=灰色>0;
cv::imshow(“二进制图像”,二进制图像);
//从这里开始
矢量轮廓;
cv::findContours(二值图像、等高线、cv\u RETR\u外部、cv\u链\u近似值\u无);
//或者:
cv::Mat inputBlobs=input.clone();//创建输出图像
对于(unsigned int i=0;i您需要一个库来开始。试试OpenCV,它是一个图像处理库。我正在使用OpenCV,但我不知道如何标记这些POI,这就是问题所在。在标记了兴趣点之后,您希望图像是什么样子?如果我知道您想要实现的目标,我可能会提出一些建议,但我不完全确定你所说的“标记这些兴趣点”是什么意思。这是我想要的结果,我是在matlab中做的。你的意思是你想点击一个图像位置并获得该位置的像素坐标?你可以使用openCV回调函数,但如果你想开发一个真正的程序(而不是测试工具)你应该使用一些真正的gui库,比如QT。你需要一个库来开始。试试OpenCV,它是一个图像处理库。我正在使用OpenCV,但我不知道如何标记这些POI,这就是问题所在。在标记了兴趣点之后,你希望图像是什么样子?如果我知道什么,我可能会提出一些建议您正在尝试实现,但我不完全确定您所说的“标记这些兴趣点”是什么意思。这是我想要的结果,我是在matlab中完成的。您的意思是您想单击图像位置并获得该位置的像素坐标?您可以使用openCV回调函数,但如果您想开发一个真正的程序(而不是测试工具)你应该使用一些真正的gui库,比如qtit's worked!!我不知道这个方法。谢谢你这么多的启发。它奏效了!!我不知道这个方法。谢谢你这么多的启发。