skm*_*skm 6 opencv memcpy c++11
我必须创建一个图像,其列数是原始图像的两倍.因此,我将新图像的宽度保持为原始图像的宽度的两倍.
虽然这是一个非常简单的任务,但我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, pSingleImg, memsize);
cv::imshow("two_times_image.jpg", twoTimesImage);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
原始图片:
结果
预期成绩:
问题:当得到的图像只是原始图像的两倍时,为什么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
Run Code Online (Sandbox Code Playgroud)
"KlasLindbäck"提供的答案绝对正确.为了给可能有类似困惑的人提供更多清晰度,我正在写这个答案.我创建了一个图像,其中包含由红色组成的奇数行和由蓝色组成的偶数行.
然后,我使用了原始帖子中给出的代码.正如"KlasLindbäck"的答案所期望的那样,红色进入第一列,蓝色进入第二列.
原始图片:
结果图片:
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |