gpt4 book ai didi

c++ - OpenCV 试图将两个不同的图像合二为一

转载 作者:行者123 更新时间:2023-11-28 02:48:45 27 4
gpt4 key购买 nike

C++ (VS2013) 使用 OpenCV 库 (2.4.9)。在 Kyle Hounslow OpenCV 教程的帮助下:无颜色实时对象跟踪。我尝试使用 2 个摄像头添加功能太跟踪。

    //read first frame
stream1.read(frame1);
//read first frame
stream2.read(frame11);

//convert frame1 to gray scale for frame differencing
cv::cvtColor(frame1, grayImage1, COLOR_BGR2GRAY);
//convert frame1 to gray scale for frame differencing
cv::cvtColor(frame11, grayImage11, COLOR_BGR2GRAY);


//copy second frame
stream1.read(frame2);
//copy second frame
stream2.read(frame22);

//convert frame2 to gray scale for frame differencing
cv::cvtColor(frame2, grayImage2, COLOR_BGR2GRAY);
//convert frame2 to gray scale for frame differencing
cv::cvtColor(frame22, grayImage22, COLOR_BGR2GRAY);

//perform frame differencing with the sequential images. This will output an "intensity image"
//do not confuse this with a threshold image, we will need to perform thresholding afterwards.
cv::absdiff(grayImage1, grayImage2, differenceImage1);
cv::absdiff(grayImage11, grayImage22, differenceImage2);


// Match the 2 Images in one
Size sz1 = differenceImage1.size(); //get the size from cam 1
Size sz2 = differenceImage2.size(); //get the size from cam 2

Mat differenceImage3(sz1.height, sz1.width + sz2.width, CV_8UC3); //create image 1 and 2

Mat leftone(differenceImage3, Rect(0, 0, sz1.width, sz1.height)); //parameters for the left side one
differenceImage1.copyTo(leftone); //copy image 1 in leftone

Mat rightone(differenceImage3, Rect(sz1.width, 0, sz2.width, sz2.height)); //parameters for the right side one
differenceImage2.copyTo(rightone); //copy image 2 in rightone


//threshold intensity image at a given sensitivity value
cv::threshold(differenceImage3, thresholdImage, SENSITIVITY_VALUE, 255, THRESH_BINARY);
if (debugMode == true){
//show the difference image and threshold image
cv::imshow("Difference Image3", differenceImage3);
cv::imshow("Difference Image2", differenceImage2);
cv::imshow("Difference Image1", differenceImage1);
}

我的问题是 differenceImage1 和 differenceImage2 完美显示。但是 differenceImage3 是灰色的。

我做错了什么?

最佳答案

differenceImage1differenceImage2是灰度图像,因此有 1 个 channel ,并且您正在分配 differenceImage3有 3 个 channel (使用标志 CV_8UC3 )。这导致两个 copyToleftone 中分配新缓冲区的调用和 rightone而不是使用来自 differenceImage3 的预分配缓冲区,因此永远不会被填充。

如果您更换:

Mat differenceImage3(sz1.height, sz1.width + sz2.width, CV_8UC3);

Mat differenceImage3(sz1.height, sz1.width + sz2.width, CV_8UC1);

关于c++ - OpenCV 试图将两个不同的图像合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com