我剛剛開始使用Open CV庫,我的第一個代碼之一是一個簡單的負轉換函數。opencv圖像窗口/ imshow
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void negative(Mat& input,Mat& output)
{
int row = input.rows;
int col = input.cols;
int x,y;
uchar *input_data=input.data;
uchar *output_data= output.data;
for(x=0;x<row;x++)
for(y=0;y<col;y++)
output_data[x*col+y]=255-input_data[x*col+y];
cout<<x<<y;
}
int main(int argc, char** argv)
{
Mat image;
image = imread(argv[1], 1);
Mat output=image.clone();
negative(image,output);
namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
imshow("Display Image", output);
waitKey(0);
return 0;
}
我添加了額外的行來檢查整個圖像是否被處理。我的輸出圖像面臨的問題是,負變換僅應用於圖像的上半部分。
現在發生的事情是,只有後,我按一個鍵x和y的值顯示(即一旦圖像顯示)
我的問題是,爲什麼被執行函數調用之前的窗口?
是的,也減去作品+1。 –
然而,你可以檢查是否'減法(Vec3b(255,255,255),輸入,輸出)'是否正確?我也認爲就地工作也更有效率。 (輸出可以與輸入相同,不需要克隆。) –
我的錯誤:標量必須具有與圖像一樣多的通道。我編輯它。輸出不一定要被克隆。他只需要實際申報。 – JonesV