C++ 在openCV中显示两个相互重叠的图像

C++ 在openCV中显示两个相互重叠的图像,c++,image,matlab,opencv,image-processing,C++,Image,Matlab,Opencv,Image Processing,在Matlab中,可以显示两个相互重叠的图像,这对于显示两个图像如何相互对齐非常有用 例如,请查看以下代码: img1 = zeros(100,100); img1(20:50, 10:40) = 255; img2 = zeros(100, 100); img2(35:65, 35:65) = 255; imshowpair(img1, img2); 这将创建以下图像: openCV库中是否有任何内置函数或方法(在c++中)可以这样做 您想使用文档中的addWeighted 您想使用文档中

在Matlab中,可以显示两个相互重叠的图像,这对于显示两个图像如何相互对齐非常有用

例如,请查看以下代码:

img1 = zeros(100,100);
img1(20:50, 10:40) = 255;
img2 = zeros(100, 100);
img2(35:65, 35:65) = 255;
imshowpair(img1, img2);
这将创建以下图像:


openCV库中是否有任何内置函数或方法(在c++中)可以这样做

您想使用文档中的
addWeighted


您想使用文档中的
addWeighted


我没有使用
imshowpair
,因此我不知道它的全部功能,但在这种情况下,它看起来只是将第一幅图像作为绿色通道,将第二幅图像作为蓝色和红色通道:

cv::Mat img1 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img1, cv::Rect(10,20,30,30), 255, CV_FILLED);

cv::Mat img2 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img2, cv::Rect(35,35,30,30), 255, CV_FILLED);

std::vector<cv::Mat> channels;
cv::Mat imgPair;

channels.push_back(img2);
channels.push_back(img1);
channels.push_back(img2);

merge(channels, imgPair);

imshow("imgPair", imgPair);
cv::waitKey(0);
cv::Mat img1=cv::Mat::zero(100100,cv_8U);
矩形(img1,cv::Rect(10,20,30,30),255,cv_填充);
cv::Mat img2=cv::Mat::Zero(100100,cv_8U);
矩形(img2,cv::Rect(35,35,30,30),255,cv_填充);
矢量信道;
cv::Mat imgPair;
通道。推回(img2);
通道。推回(img1);
通道。推回(img2);
合并(频道、imgPair);
imshow(“imgPair”,imgPair);
cv::waitKey(0);
输出:


我没有使用
imshowpair
,因此我不知道它的全部功能,但在这种情况下,它看起来就像是简单地将第一幅图像作为绿色通道,将第二幅图像作为蓝色和红色通道:

cv::Mat img1 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img1, cv::Rect(10,20,30,30), 255, CV_FILLED);

cv::Mat img2 = cv::Mat::zeros(100, 100, CV_8U);
rectangle(img2, cv::Rect(35,35,30,30), 255, CV_FILLED);

std::vector<cv::Mat> channels;
cv::Mat imgPair;

channels.push_back(img2);
channels.push_back(img1);
channels.push_back(img2);

merge(channels, imgPair);

imshow("imgPair", imgPair);
cv::waitKey(0);
cv::Mat img1=cv::Mat::zero(100100,cv_8U);
矩形(img1,cv::Rect(10,20,30,30),255,cv_填充);
cv::Mat img2=cv::Mat::Zero(100100,cv_8U);
矩形(img2,cv::Rect(35,35,30,30),255,cv_填充);
矢量信道;
cv::Mat imgPair;
通道。推回(img2);
通道。推回(img1);
通道。推回(img2);
合并(频道、imgPair);
imshow(“imgPair”,imgPair);
cv::waitKey(0);
输出:


这是当您只想在调试模式下使用openCV库时正在运行的代码:

void showImagePairs(const cv::Mat &img1, const cv::Mat &img2) {

    std::vector<cv::Mat> channels;
    cv::Mat imgPair;

    channels.push_back(img2);
    channels.push_back(img1);
    channels.push_back(img2);

    cv::merge(&channels[0], channels.size(), imgPair);

    cv::imshow("imgPair", imgPair);

    int c = cvWaitKey(40);

}
void showImagePairs(常数cv::Mat和img1,常数cv::Mat和img2){
矢量信道;
cv::Mat imgPair;
通道。推回(img2);
通道。推回(img1);
通道。推回(img2);
cv::merge(&channels[0],channels.size(),imgPair);
cv::imshow(“imgPair”,imgPair);
int c=cvWaitKey(40);
}

这是当您只想在调试模式下使用openCV库时正在运行的代码:

void showImagePairs(const cv::Mat &img1, const cv::Mat &img2) {

    std::vector<cv::Mat> channels;
    cv::Mat imgPair;

    channels.push_back(img2);
    channels.push_back(img1);
    channels.push_back(img2);

    cv::merge(&channels[0], channels.size(), imgPair);

    cv::imshow("imgPair", imgPair);

    int c = cvWaitKey(40);

}
void showImagePairs(常数cv::Mat和img1,常数cv::Mat和img2){
矢量信道;
cv::Mat imgPair;
通道。推回(img2);
通道。推回(img1);
通道。推回(img2);
cv::merge(&channels[0],channels.size(),imgPair);
cv::imshow(“imgPair”,imgPair);
int c=cvWaitKey(40);
}

这可能会有帮助:这可能会有帮助:我在寻找一种与matlab一样好的图像表示方法。我在寻找一种与matlab一样好的图像表示方法。好的。我不确定这和我的答案有什么不同,但我想,你让它工作起来很好。不同之处在于你想在“调试”或“发布”模式下运行代码。使用您的代码,它给了我一个异常,我只有opencv中的release.lib文件(我编译库只是为了发布模式)!这真是一个微不足道的变化。欢迎提供一些反馈。如果做不到这一点,一些归因应该是恰当的。当然,这是微不足道的,当然,这基本上来自于你的答案。好的。我不确定这和我的答案有什么不同,但我想,你让它工作起来很好。不同之处在于你想在“调试”或“发布”模式下运行代码。使用您的代码,它给了我一个异常,我只有opencv中的release.lib文件(我编译库只是为了发布模式)!这真是一个微不足道的变化。欢迎提供一些反馈。如果做不到这一点,一些归因是合适的。当然,这是微不足道的,当然,这基本上是来自你的答案。