opencv – 了解memcpy()完成的复制

前端之家收集整理的这篇文章主要介绍了opencv – 了解memcpy()完成的复制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须创建一个图像,其列数是原始图像的两倍.因此,我将新图像的宽度保持为原始图像的宽度的两倍.

虽然这是一个非常简单的任务,但我已经完成了,但我想知道使用memcpy()执行此任务所获得的奇怪结果.

我的代码

int main()
{

    Mat image = imread("pikachu.png",1);
    int columns = image.cols;
    int rows = image.rows;

    Mat twoTimesImage(image.rows,2 * image.cols,CV_8UC3,Scalar(0));

    unsigned char *pSingleImg = image.data;
    unsigned char *ptwoTimes = twoTimesImage.data;

    size_t memsize = 3 * image.rows*image.cols;

    memcpy(ptwoTimes,pSingleImg,memsize);
    memcpy(ptwoTimes + memsize,memsize);

    cv::imshow("two_times_image.jpg",twoTimesImage);

    return 0;
}

原始图片

结果

预期成绩:

@L_502_2@

问题:当得到的图像只是原始图像的两倍时,为什么4个原始图像被复制到新图像?其次,memcpy()以行方式复制连续的内存位置,因此我应该得到一个显示在“预期结果”中的图像.

解决方法

左猫由奇数行组成,右猫由原始图片的偶数行组成.然后加倍,以便下面还有两只猫.新猫的原始猫数量只有一半.

图片的布局如下:

line 1  line 2
line 3  line 4
line 5  line 6
...     
line n-1 line n
line 1  line 2
line 3  line 4
line 5  line 6
...     
line n-1 line n

猜你在找的C&C++相关文章