循环并通过图像向量显示

loop and display through a vector of images

本文关键字:图像 向量显示 循环      更新时间:2023-10-16

我正在使用openCV和c 。我正在做一个非常简单的程序。它的作用是在向量垫中拍摄3个图像,将这些图像转换为HSV,然后再次将原始图像的HSV存储在矢量中。我想显示所有获得的3个HSV图像。但是,当我的程序循环时,它仅显示向量中的最后一个HSV映像。这是我的代码:http://pastebin.com/z7fbrtxs。

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(){
    vector<Mat> imgs;
    Mat left=imread("left.jpg");
    Mat front=imread("front.jpg");
    Mat right=imread("right.jpg");
    imgs.push_back(left);
    imgs.push_back(front);
    imgs.push_back(right);

    vector<Mat> hsvs;
    Mat left_hsv;
    Mat front_hsv;
    Mat right_hsv;
    cvtColor(left,left_hsv,CV_BGR2HSV);
    cvtColor(front,front_hsv,CV_BGR2HSV);
    cvtColor(right,right_hsv,CV_BGR2HSV);
    hsvs.push_back(left_hsv);
    hsvs.push_back(front_hsv);
    hsvs.push_back(right_hsv);
    for(int i=0;i<3;i++){
        imshow("hsv",hsvs[i]);
    }
    waitKey(0);
    return 0;
}

这个

for(int i=0;i<3;i++){
    imshow("hsv",hsvs[i]);
}
waitKey(0);

表示您在名为" HSV"的窗口中显示所有图像。显示最后一个后,您等待用户输入。因此,这些图像实际上全部显示在窗口中,按顺序显示,只是它们切换得如此之快,您永远不会看到它。将其更改为

for(int i=0;i<3;i++){
    imshow("hsv",hsvs[i]);
    waitKey(0);
}

你应该很好。此更改意味着每个图像将显示在" HSV"窗口中,然后等待您按下按钮,然后显示下一个图像。

您也可以通过将窗口重命名为" HSV1"," HSV2"等,一次显示多个窗口。

用途:

for(int i=0;i<3;i++){
    imshow("hsv",hsvs[i]);
    waitKey(0); //Note: wait for user input for every image
}

或在三个不同命名的窗口中显示它们。

由于没有提供坐标,我想所有图像均在同一默认位置(视口源)绘制,最后图像均在所有以前的图像上绘制。