我必须创建一个图像,其列数是原始图像的两倍.因此,我将新图像的宽度保持为原始图像的宽度的两倍.
虽然这是一个非常简单的任务,但我已经完成了,但我想知道使用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; }
原始图片:
结果
预期成绩:
问题:当得到的图像只是原始图像的两倍时,为什么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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。