OpenCV C++读取图片,窗口自适应
时间: 2023-07-03 18:14:01 浏览: 224
要实现窗口自适应,你可以使用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;
}
```
相关问题
C++ OpenCV自适应伽玛矫正
您好!对于C++中使用OpenCV进行自适应伽马校正,您可以按照以下步骤进行操作:
1. 导入OpenCV库:
```cpp
#include <opencv2/opencv.hpp>
```
2. 读取图像:
```cpp
cv::Mat image = cv::imread("input.jpg");
```
3. 将图像转换为浮点型数据:
```cpp
cv::Mat image_float;
image.convertTo(image_float, CV_32F, 1.0 / 255.0);
```
4. 对图像进行自适应伽马校正:
```cpp
cv::Mat gamma_corrected;
cv::pow(image_float, 1.0 / gamma, gamma_corrected);
```
其中,gamma是伽马值,可以根据需要进行调整。
5. 将图像转换回8位无符号整型数据:
```cpp
cv::Mat output;
gamma_corrected.convertTo(output, CV_8U, 255.0);
```
6. 显示和保存结果:
```cpp
cv::imshow("Gamma Corrected Image", output);
cv::imwrite("output.jpg", output);
cv::waitKey(0);
```
请注意,这只是一个基本的示例代码,您可能需要根据您的实际需求进行适当的调整和优化。希望能帮到您!如有任何问题,请随时提问。
OpenCV C++提取文字
OpenCV 提供了一些强大的图像处理工具,可以用于文字提取。下面是一个简单的示例代码,演示了如何使用 OpenCV C++ 提取一张图像中的文本。
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat img = imread("text.png");
// 将图像转换为灰度图像
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
// 使用自适应阈值二值化图像
Mat binary;
adaptiveThreshold(gray, binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, 10);
// 定义矩形结构体,用于包围文本区域
Rect rect;
// 找到文本区域的轮廓
std::vector<std::vector<Point>> contours;
findContours(binary, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
// 遍历每个轮廓
for (const auto& contour : contours)
{
// 计算轮廓的包围矩形
rect = boundingRect(contour);
// 如果矩形较小,则忽略该轮廓
if (rect.width < 20 || rect.height < 20)
{
continue;
}
// 在原图上绘制矩形
rectangle(img, rect, Scalar(0, 255, 0), 2);
}
// 显示结果
imshow("Text Detection", img);
waitKey(0);
return 0;
}
```
这个示例代码首先将图像转换为灰度图像,然后使用自适应阈值二值化方法将图像转换为二进制图像。接下来,通过 findContours 函数找到文本区域的轮廓,并使用 boundingRect 函数计算每个轮廓的包围矩形。最后,在原图上绘制包围矩形,以可视化文本区域。