中文 opencv cvRound函数
时间: 2023-05-28 08:08:05 浏览: 369
cvRound函数是OpenCV中的一个函数,用于将浮点数四舍五入为最接近的整数。
函数原型如下:
```cpp
int cvRound(double value);
```
参数:
- value:需要四舍五入的浮点数。
返回值:
- 返回四舍五入后的整数。
示例:
```cpp
double value = 3.6;
int roundedValue = cvRound(value);
cout << roundedValue << endl; // 输出 4
```
在OpenCV中,cvRound函数通常用于图像处理中的像素值转换,如将浮点数像素值转换为整数像素值。
相关问题
opencv cvRound
cvRound() 是OpenCV中的一个函数,用于将一个浮点数四舍五入为最接近的整数。具体来说,它是在double类型的数据上实现的,可以将其转换为int类型的数据。
举个例子,如果有一个double类型的变量a=2.8,那么调用cvRound(a)函数会返回3,表示将2.8四舍五入后得到了3这个整数。
此外,值得一提的是,cvRound()函数在OpenCV的早期版本中是直接使用C++的round()函数实现的,但在C++11标准中,round()函数已经成为标准库中的一部分。因此,在新版本的OpenCV中,cvRound()函数已经被废弃,建议使用C++标准库中的round()函数代替。
opencv calchist函数C++实现
以下是使用C++实现OpenCV中的calcHist函数的示例代码:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat image = imread("test.jpg", IMREAD_GRAYSCALE); //读入灰度图像
if (image.empty()) //判断图像是否为空
{
cerr << "Failed to load image!" << endl;
return -1;
}
int histSize = 256; //直方图中bin的数量
float range[] = { 0, 256 }; //像素值范围
const float* histRange = { range };
bool uniform = true, accumulate = false;
Mat hist; //用于保存直方图的Mat
calcHist(&image, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate); //计算直方图
int hist_w = 512, hist_h = 400; //直方图的宽和高
int bin_w = cvRound((double)hist_w / histSize); //每个bin的宽度
Mat histImage(hist_h, hist_w, CV_8UC1, Scalar(0)); //用于绘制直方图的Mat
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat()); //将直方图归一化到[0, histImage.rows]范围内
for (int i = 1; i < histSize; i++)
{
line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(hist.at<float>(i - 1))),
Point(i * bin_w, hist_h - cvRound(hist.at<float>(i))), Scalar(255), 2, LINE_AA); //在直方图上绘制每个bin的高度
}
imshow("Image", image);
imshow("Histogram", histImage);
waitKey(0);
return 0;
}
```
首先,使用`imread`函数读入灰度图像。然后,定义直方图的bin数量、像素值范围、是否均匀化、是否累加等参数,并创建一个用于保存直方图的Mat。接着,调用`calcHist`函数计算直方图。
计算完直方图后,定义用于绘制直方图的Mat,并将直方图归一化到[0, histImage.rows]范围内。最后,在直方图上绘制每个bin的高度,然后显示原始图像和直方图,等待用户按下任意键后程序结束。
阅读全文