C++ 使用openCv c+复制图像的一部分+;
我正在使用opencv,我想从另一个图像的一部分创建一个图像 我没有找到这样做的函数,所以我尝试实现我的想法,包括逐像素复制图像,但徒劳,我没有得到我等待的结果 有人有别的想法吗 代码:C++ 使用openCv c+复制图像的一部分+;,c++,c,opencv,image-processing,C++,C,Opencv,Image Processing,我正在使用opencv,我想从另一个图像的一部分创建一个图像 我没有找到这样做的函数,所以我尝试实现我的想法,包括逐像素复制图像,但徒劳,我没有得到我等待的结果 有人有别的想法吗 代码: #包括“cv.h” #包括“highgui.h” #包括 #包括 #包括 int main(int argc,字符**argv){ IplImage*img=0; uchar*数据; int i,j,k; int高度、宽度、宽度步长、n通道; img=cvLoadImage(argv[1],3); 高度=img
#包括“cv.h”
#包括“highgui.h”
#包括
#包括
#包括
int main(int argc,字符**argv){
IplImage*img=0;
uchar*数据;
int i,j,k;
int高度、宽度、宽度步长、n通道;
img=cvLoadImage(argv[1],3);
高度=img->height;
宽度=img->width;
widthStep=img->widthStep;
nChannels=img->nChannels;
数据=(uchar*)img->imageData;
IplImage*img1=cvCreateImage(cvSize(高度/2,宽度/2),IPL_深度_8U,nChannels);
对于(i=0;i查找函数
为给定矩形设置感兴趣的图像区域(ROI)
您应该使用cv::Mat
的复制构造函数。它比IplImage
好得多:
int x = 10,
y = 20,
width = 200,
height = 200;
Mat img1, img2;
img1 = imread("Lenna.png");
img2 = img1(Rect(x, y, width, height));
可以通过在该图像上设置一个感兴趣区域(ROI)并将该ROI定义的部分复制到一个新图像来完成您试图完成的任务
你可以看到一个
这些帖子展示了如何使用ROI来解决不同的场景:
重要的是要注意,你的代码使用OpenCV的<>强> C接口>强。C++接口提供了<代码> cv::MAT,这相当于<代码> IplImage < /C> >。换句话说,你要寻找的是一个<强> C解决方案< /强>问题。< /P> < P>使用复制构造函数:
cv::Mat whole = ...; // from imread or anything else
cv::Mat part(
whole,
cv::Range( 20, 220 ), // rows
cv::Range( 10, 210 ));// cols
它不是更好的定义,它是不同的;传统OpenCV与“新”C++ API。确实,但是旧IPLICOND的东西将在OpenCV 3中被贬值,我建议所有阅读这一点的人切换到新的CV::Mat风格。
cv::Mat whole = ...; // from imread or anything else
cv::Mat part(
whole,
cv::Range( 20, 220 ), // rows
cv::Range( 10, 210 ));// cols