在openCV中逐像素复制

copying pixel by pixel in openCV

我有一个代码可以将一个视频复制到另一个视频 当我以某种方式复制它时,角度会发生变化

这是一张link的图片

http://i24.photobucket.com/albums/c22/Klifford_Kho/wrongpixel_zpsloshtqqy.png

 Mat frame;
Mat processedImage;





void copy()
{


for (int i = 0; i<400; i++)
{
    for (int j = 0; j<200; j++)
    {

        int b = frame.at<cv::Vec3b>(i, j)[0];
        int g = frame.at<cv::Vec3b>(i, j)[1];
        int r = frame.at<cv::Vec3b>(i, j)[2];


        processedImage.at<cv::Vec3b>(i, j)[0] = b;
        processedImage.at<cv::Vec3b>(i, j)[1] = g;
        processedImage.at<cv::Vec3b>(i, j)[2] = r;


    }
}



int main()
{
VideoCapture cap(0); // get first cam
while (cap.isOpened())
{

    if (!cap.read(frame)) // cam might need some warmup
        continue;
    processedImage = cv::Mat(frame.size().height, frame.size().width, CV_8UC1);
    processedImage.setTo(cv::Scalar::all(0));

    copy();




    imshow("Original", frame);
    imshow("Processed", processedImage);
    if (waitKey(10) == 27)
        break;
}
return 0;

}

P.S。我没有在条件中使用 frame.cols 和 frame.rows 因为它产生了一个错误 这是错误的图片 http://i24.photobucket.com/albums/c22/Klifford_Kho/wrongpixel_zpswze5qjrr.png

这是因为您创建了单通道目标图像。

processedImage = cv::Mat(frame.size().height, frame.size().width, CV_8UC1);

将CV_8UC1更改为CV_8UC3,它应该也有助于解决问题末尾提到的错误。