Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用openCv c+复制图像的一部分+;_C++_C_Opencv_Image Processing - Fatal编程技术网

C++ 使用openCv c+复制图像的一部分+;

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

我正在使用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->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