【发布时间】:2015-06-05 00:33:48
【问题描述】:
我最近开始研究 opencv。我有一个图像在一行中有几个点。我想在这些点周围做一个矩形边框。 我已经应用了一些基本的 C 算法,但它对我不起作用。 这是我的代码。
int main()
{
cv::Mat image = imread("C:/Users/Ravi Sharma/Desktop/img.bmp");
for(int i =0; i < image.rows; i++){
for(int k = 0; k <image.cols; k ++){
if((image.at<cv::Vec3b>(k,i)[0] == 0)&&(image.at<cv::Vec3b>(k,i)[1] == 135)&&(image.at<cv::Vec3b>(k,i)[2] == 255))
{
(image.at<cv::Vec3b>(k,i)[0] = 0)&&(image.at<cv::Vec3b>(k,i)[1] = 0)&&(image.at<cv::Vec3b>(k,i)[2] = 255);
}
}
}
imwrite("C:/Users/Ravi Sharma/Desktop/img1.bmp",image);
cv::namedWindow("Window1");
cv::imshow("Window1",image);
cv::waitKey(50000);
return 1;
}
此代码不更新像素值。请帮助我更正代码以获得所需的结果。 我如何使用 cvminmaxloc 函数来做同样的事情。 提前谢谢。
【问题讨论】:
-
函数
cvminmaxloc查找最小和最大元素值及其位置。因此,如果我正确理解您的问题,那么此功能将无济于事。 -
您可以使用 cvminmaxloc 查找单通道数组中最小/最大元素的位置。如果您反复调用它并比较/更新/存储 min 元素的最高/最低点(左上角、右下角),您可以使用它们绘制一个矩形。您将需要使用灰度图像,并且必须在每次调用后更新您的图像,以防止返回相同的位置(用白色填充最小位置)。
-
你能举个例子解释一下吗? @user3510227
-
如果轴对齐使用docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/…如果旋转矩形有类似的功能
标签: c++ image opencv image-processing