vector转opencv Mat(非拷贝)

没错,我突发奇想用vector画了幅图,而且只用了大约两百个int

知识点:

  • 无论是三通道的图像,还是单通道的图像,在内存里都是和数组排布一样的一长条
  • 获取到头部只需要Mat.data即可,修改也是很方便
  • .data地址指向数组的头部即可完成vector到图像的转化(非拷贝)

 

下面就是简单粗暴的代码

#include<opencv2/opencv.hpp>

int main() {

	std::vector<int>ha = {
		2335,2345,2356,2366,2434,2445,2456,2466,2534,2545,2556,2566,
		2634,2645,2656,2666,2734,2745,2756,2766,2818,2881,2918,2981,
		3018,3081,3118,3181,3218,3281,3318,3381,3418,3481,3518,3581,
		3634,3645,3656,3666,3730,3733,3734,3745,3756,3766,3829,3845,
		3856,3866,3929,3939,3956,3966,4028,4039,4127,4139,4227,4277,
		4326,4377,4425,4477,4525,4577,4624,4677,4723,4777,4822,4877,
		4921,4977,5020,5033,5067,5077,5119,5132,5167,5177,5218,5231,
		5267,5277,5317,5359,5367,5377,5418,5459,5467,5477,5519,5559,
		5567,5577,5619,5659,5667,5677,5720,5759,5767,5777,5820,5859,
		5867,5877,5921,5925,5926,5959,5967,5977,6022,6024,6026,6059,
		6067,6077,6126,6136,6149,6159,6167,6177,6226,6236,6249,6259,
		6267,6277,6326,6336,6349,6359,6366,6377,6426,6436,6449,6459,
		6466,6477,6526,6536,6549,6559,6566,6577,6626,6659,6666,6677,
		6726,6759,6766,6777,6826,6859,6866,6876,6926,6959,6966,6976,
		7026,7059,7066,7076,7126,7159,7166,7176,7226,7259,7266,7276,
		7326,7359,7366,7376,7426,7436,7465,7476,7526,7536,7564,7576,
		7626,7636,7647,7676,7726,7736,7748,7776,7848,7875,7948,7975,
		8048,8074,8149,8173,8249,8272,8349,8370,8449,8467
	};
	std::vector<uchar>data_list(10000, 255);
	for (int i = 0; i < ha.size(); i += 2) {
		for (int j = ha[i]; j < ha[i + 1]; ++j)
			data_list[j] = 0;
	}
	auto a = &data_list[0];
	//std::cout<< "数据地址"<< (void *)a<<std::endl;
	cv::Mat image(100, 100, CV_8UC1, cv::Scalar(0, 0, 0));
	image.data =  (uchar *)a;
	cv::imshow("haha", image);
	cv::waitKey();
}

还是忍不住把结果放上来了…233

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱铭德

五毛也是爱٩(●´৺`●)૭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值