在openCV中逐个像素地复制

时间:2015-07-31 13:55:30

标签: opencv visual-c++

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

是一张照片的链接

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

1 个答案:

答案 0 :(得分:2)

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

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

将CV_8UC1更改为CV_8UC3,它也应该有助于提问时提到的错误。