OpenCV C++读取图片,窗口自适应
时间: 2023-07-03 19:14:01 浏览: 814
要实现窗口自适应,你可以使用OpenCV中的imshow函数,该函数可以根据读入的图片大小自动调整显示窗口的大小。具体实现步骤如下:
1. 读取图片并存储到Mat对象中:
```c++
cv::Mat img = cv::imread("image.jpg");
```
2. 创建一个窗口并显示图片:
```c++
cv::namedWindow("My Window", cv::WINDOW_NORMAL);
cv::imshow("My Window", img);
```
在namedWindow函数中,我们使用了WINDOW_NORMAL参数,这将允许我们自适应窗口大小。
3. 等待用户按下任意键:
```c++
cv::waitKey(0);
```
这个函数会一直等待用户按下键盘上的任意键,直到用户按下键盘上的任意键,程序才会继续执行下去。
完整代码如下:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
cv::Mat img = cv::imread("image.jpg");
cv::namedWindow("My Window", cv::WINDOW_NORMAL);
cv::imshow("My Window", img);
cv::waitKey(0);
return 0;
}
```
相关问题
opencvc++读取jepg图像自适应大小
在使用OpenCV的C++库来读取JPEG图像文件时,可以通过读取图像的尺寸信息,并根据需要的尺寸比例对图像进行缩放,以实现自适应大小的功能。以下是一个简单的步骤和代码示例:
1. 首先,需要包含必要的OpenCV头文件,并使用cv命名空间。
2. 使用`cv::imread`函数读取JPEG图像文件。
3. 获取图像的原始尺寸。
4. 根据需要自适应的尺寸或比例,计算新的尺寸或比例因子。
5. 使用`cv::resize`函数按照新的尺寸或比例因子对图像进行缩放。
6. 最后,可以使用`cv::imshow`显示图像,或者进行其他处理。
下面是一个简单的代码示例:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取JPEG图像文件
Mat image = imread("path_to_image.jpg");
if(image.empty()) {
std::cout << "无法读取图像文件" << std::endl;
return -1;
}
// 获取原始图像尺寸
int originalWidth = image.cols;
int originalHeight = image.rows;
// 根据需要设定的目标宽度或高度
int targetWidth = 640; // 或者根据其他逻辑计算得出
// 如果只需要改变宽度,保持高度比例不变
double widthRatio = (double)targetWidth / originalWidth;
int targetHeight = static_cast<int>(originalHeight * widthRatio);
// 根据目标尺寸创建一个新的图像矩阵
Mat resizedImage;
// 对图像进行缩放
resize(image, resizedImage, Size(targetWidth, targetHeight));
// 显示缩放后的图像
imshow("Resized Image", resizedImage);
waitKey(0);
return 0;
}
```
在这个示例中,代码首先读取了一个JPEG图像文件,然后获取其原始尺寸,并根据指定的目标宽度来计算新的高度,以保持图像的宽高比不变。之后,使用`cv::resize`函数将图像缩放到新的尺寸。
opencv 自适应二值化 C++
### OpenCV 中自适应二值化 C++ 实现
#### 自适应阈值简介
在计算机视觉领域,图像预处理是一个重要环节。其中,自适应二值化是一种常用的技术,用于将灰度图转换成二值图。这种方法能够根据局部区域的特点自动调整阈值,从而更好地保留细节并减少噪声影响。
对于 `cv::adaptiveThreshold` 函数,在 OpenCV 的 C++ API 下提供了两种主要的方法来计算自适应阈值:
- **均值法 (ADAPTIVE_THRESH_MEAN_C)**: 使用邻域内像素的平均值作为当前像素点的阈值[^4]。
- **高斯加权求和法 (ADAPTIVE_THRESH_GAUSSIAN_C)**: 利用高斯分布对周围像素赋予不同权重后再相加以决定该位置上的新亮度值。
下面给出一段完整的代码示例展示如何应用这两种算法进行图片处理:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv){
Mat src = imread(argv[1], IMREAD_GRAYSCALE); // 加载输入图像为灰度模式
if(src.empty()){
printf("Could not open or find the image\n");
return -1;
}
Mat dst_mean, dst_gaussian;
/// 应用均值法自适应阈值
adaptiveThreshold( src, dst_mean, 255,
ADAPTIVE_THRESH_MEAN_C,
THRESH_BINARY,
11, // 块大小
2 );// 参数C
/// 应用高斯加权求和法自适配阈值
adaptiveThreshold( src, dst_gaussian, 255,
ADAPTIVE_THRESH_GAUSSIAN_C,
THRESH_BINARY,
11,// 块大小
2 );// 参数C
imshow("Source Image", src);
imshow("Adaptive Mean Thresholding", dst_mean);
imshow("Adaptive Gaussian Thresholding", dst_gaussian);
waitKey();
return 0;
}
```
这段程序读取命令行参数指定的一张图片文件路径,并分别采用上述提到的不同方式对其进行变换操作;最后通过窗口显示原始以及经过处理后的效果对比[^3]。
阅读全文
相关推荐
















