c++输出显示图片代码
时间: 2023-11-28 18:02:05 浏览: 48
在 C++ 中,可以使用第三方库如OpenCV来读取和显示图片。以下是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图片文件
Mat image = imread("image.jpg", IMREAD_COLOR);
// 检查图片是否成功读取
if(image.empty()) {
std::cout << "无法读取图片文件" << std::endl;
return -1;
}
// 创建窗口并显示图片
namedWindow("Image", WINDOW_NORMAL);
imshow("Image", image);
// 等待用户按下任意键后关闭窗口
waitKey(0);
destroyAllWindows();
return 0;
}
```
此代码先使用`imread`函数读取名为`image.jpg`的图片文件,然后通过`imshow`函数在一个名为`Image`的窗口中显示图片。最后,使用`waitKey`函数等待用户按下任意键后关闭窗口。
相关问题
c++鼠标点击输出翻转图片
可以使用OpenCV库来实现鼠标点击事件,点击图片时,将图片进行水平翻转并输出翻转后的图像。下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
bool flip_flag = false; // 默认不翻转
void onMouse(int event, int x, int y, int flags, void* param)
{
if (event == EVENT_LBUTTONDOWN) // 左键点击
{
flip_flag = !flip_flag; // 点击后翻转标志取反
}
}
int main()
{
// 读入图片
Mat img = imread("test.jpg");
namedWindow("Image", WINDOW_NORMAL);
setMouseCallback("Image", onMouse, 0);
while (true)
{
Mat img_show;
if (flip_flag) // 如果需要翻转
{
flip(img, img_show, 1); // 进行水平翻转
}
else
{
img_show = img.clone(); // 不翻转,直接显示原图
}
imshow("Image", img_show);
char key = waitKey(30);
if (key == 27) // 按下ESC键退出循环
{
break;
}
}
return 0;
}
```
在上面的代码中,我们使用了`setMouseCallback`函数来设置鼠标回调函数。每次左键点击时,会将翻转标志取反。在循环中,根据翻转标志来决定是否进行水平翻转并显示翻转后的图像。按下ESC键可以退出循环。
注意:在使用OpenCV库之前,需要先安装OpenCV库并配置好环境变量。
SIFT输出特征匹配C++代码
以下是SIFT输出特征匹配的C++代码示例:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img1 = imread("img1.jpg", IMREAD_GRAYSCALE);
Mat img2 = imread("img2.jpg", IMREAD_GRAYSCALE);
//检测SIFT特征点
Ptr<Feature2D> detector = SIFT::create();
vector<KeyPoint> keypoints1, keypoints2;
detector->detect(img1, keypoints1);
detector->detect(img2, keypoints2);
//计算SIFT描述子
Mat descriptors1, descriptors2;
detector->compute(img1, keypoints1, descriptors1);
detector->compute(img2, keypoints2, descriptors2);
//进行特征点匹配
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
vector<DMatch> matches;
matcher->match(descriptors1, descriptors2, matches);
//绘制匹配结果
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
imshow("Matches", img_matches);
waitKey(0);
return 0;
}
```
以上代码首先读取了两张图片,然后使用SIFT算法检测特征点和计算描述子。接着使用FLANN算法对特征点进行匹配,并绘制匹配结果。最后显示匹配结果图像,并等待按键退出程序。