C语言OpenCV创建图片,c – Opencv使用cv :: Mat创建新图像
时间: 2024-01-21 19:17:55 浏览: 84
在 C 语言中使用 OpenCV 创建新图像可以使用以下代码:
```c
#include <opencv2/opencv.hpp>
int main() {
// 创建一个大小为 512x512 的黑色图像
cv::Mat img(512, 512, CV_8UC1, cv::Scalar(0));
// 在图像上画一条红线
cv::line(img, cv::Point(0, 0), cv::Point(511, 511), cv::Scalar(255), 5);
// 显示图像
cv::imshow("image", img);
cv::waitKey();
return 0;
}
```
这里使用 `cv::Mat` 类创建一个大小为 512x512 的黑色图像,并在图像上画了一条红色的线。`CV_8UC1` 表示每个像素有一个 8 位无符号整数,且图像只有一个通道(灰度图像)。`cv::Scalar(0)` 表示初始化为 0,即黑色。`cv::Point` 表示点的坐标,`cv::Scalar(255)` 表示颜色值,即白色,5 表示线条的宽度。最后使用 `cv::imshow` 函数显示图像。
相关问题
c语言opencv图片去噪
在C语言中利用OpenCV进行图片去噪通常涉及到数字图像处理技术,常见的方法有:
1. **均值滤波**:这是最简单的去噪方法之一,通过计算像素周围一小块区域的平均值替换当前像素,可以平滑图像并去除噪声。
```c
cv::Mat imgBlur;
cv::blur(src, imgBlur, cv::Size(ksize, ksize)); // ksize是卷积核大小
```
2. **高斯滤波**:相比于均值滤波,高斯滤波更倾向于保留边缘信息,因为它对近似的高斯分布采样,有助于减少高频噪声。
```c
cv::Mat imgGaussian;
cv::GaussianBlur(src, imgGaussian, cv::Size(kernel_size, kernel_size), 0);
```
3. **双边滤波**:它既考虑了空间邻域又考虑了灰度差异,能在保持边缘的同时去噪,适合于保留细节的场景。
```c
cv::Mat imgBilateral;
cv::bilateralFilter(src, imgBilateral, d, sigmaColor, sigmaSpace);
```
4. **中值滤波**:适用于去除椒盐噪声,特别适合于二值图像或含有椒盐噪声的图像。
```c
cv::Mat imgMedian;
cv::medianBlur(src, imgMedian, ksize);
```
以上代码中,`src`是输入的原始图像,`imgBlur`, `imgGaussian`, 等是处理后的结果,`ksize`、`kernel_size`是滤波器的窗口大小,`d`和`sigma`是控制滤波效果的参数。
c语言opencv图片腐蚀膨胀操作
在C语言中使用OpenCV库进行图像腐蚀(Erosion)和膨胀(Dilation)操作,主要是为了消除图像噪声、细化边缘或者增强特定区域。以下是这两个操作的基本步骤:
1. **腐蚀** (Erosion):
- Erosion通常用于缩小物体边界,去除小的噪声点。OpenCV提供`erode()`函数来实现,它会用一个被称为“结构元素”(kernel)的小矩阵对图像进行迭代处理。
- 语法示例:
```c
Mat img_eroded; // 输出腐蚀后的图像
structuring_element se;
int kernel_size = 3; // 可调整的结构元素大小,例如3x3
int iterations = 1; // 迭代次数,一次腐蚀操作
cv::erode(src, img_eroded, se, cv::Point(-1,-1), iterations);
```
- 结构元素通常是圆形、矩形或其他形状,可以自定义。
2. **膨胀** (Dilation):
- Dilation则相反,它是扩大物体边界,填充空隙。同样有`dilate()`函数,原理类似腐蚀,只是结构元素向内移动而不是向外。
- 例子:
```c
Mat img_dilated;
cv::dilate(src, img_dilated, se, cv::Point(-1,-1), iterations);
```
阅读全文