Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Visual c++ 通过直接访问改变像素值+;opencv_Visual C++_Opencv - Fatal编程技术网

Visual c++ 通过直接访问改变像素值+;opencv

Visual c++ 通过直接访问改变像素值+;opencv,visual-c++,opencv,Visual C++,Opencv,这段代码中是否有任何问题,我只是试图通过直接访问像素来减去图像的像素值。。。。。我假设这些图像具有相同的高度和宽度。。。每当我运行程序时,我都会看到一幅完全黑色的画面 IplImage * img3 = cvCreateImage(cvSize(img1->height,img1->width),IPL_DEPTH_32F,3); // img2 and img1 both are IplImage pointers cvZero(img3); long value; for ( i

这段代码中是否有任何问题,我只是试图通过直接访问像素来减去图像的像素值。。。。。我假设这些图像具有相同的高度和宽度。。。每当我运行程序时,我都会看到一幅完全黑色的画面

IplImage * img3 = cvCreateImage(cvSize(img1->height,img1->width),IPL_DEPTH_32F,3);
// img2 and img1 both are IplImage pointers
cvZero(img3);
long value;
for ( int row = 0 ; row < img2->height * img2->width ; row ++ ){
    value = &((uchar*)(img1->imageData))[row] - &((uchar*)(img2->imageData))[row] ; 
    img3->imageData[row] = value;
IplImage*img3=cvCreateImage(cvSize(img1->height,img1->width),IPL\u DEPTH\u 32F,3);
//img2和img1都是IplImage指针
cvZero(img3);
长期价值;
对于(int row=0;rowheight*img2->width;row++){
值=&((uchar*)(img1->imageData))[row]-&((uchar*)(img2->imageData))[row];
img3->imageData[行]=值;
1)img2->高度*img2->宽度在循环前计算为常数

(二) 我不懂这句话 &((uchar*)(img1->imageData))[row]&((uchar*)(img2->imageData))[row]-您正在从另一个指针减去指针吗?为什么? value=img1->imageData[row]-img2->imageData[row];应该可以

3) 不能通过减去像素值来减去RGB值(如果这是您的目标)


4) 如果img3->imageData是*char,那么你应该乘以第*4行。

你能告诉我为什么第三点不起作用吗?RGB值存储在该像素坐标上……因此在imageData中,这些值是根据像素坐标的某种格式存储的,比如r0、g0、b0、r1……等等……如果我只是将它们中的每一个都减去另一个,它不会起作用吗rk?