在openCV

时间:2016-12-19 13:57:23

标签: 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);

创建以下图片:

enter image description here

openCV库中是否有内置函数或任何方法(在c ++中)?

3 个答案:

答案 0 :(得分:3)

您希望addWeighted使用here

Mat img1 = Mat(100,100,CV_8UC3,Scalar::all(0));
Mat img2 = Mat(100,100,CV_8UC3,Scalar::all(0));
rectangle(img1, Rect(20,10,50,40), Scalar(0,255,0), -1);
rectangle(img2, Rect(35,35,65,65), Scalar(255,0,255), -1);
Mat result;
addWeighted(img1, 0.5, img2, 0.5, 0.0, result);
imshow("SO question", result);
waitKey(10);

答案 1 :(得分:2)

我没有使用过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);

输出:

imgPair result

答案 2 :(得分: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);

}