C,C++用过的调试方式/函数/小程序

这篇博客详细介绍了C++中的一些调试方法,包括注释和取消注释的快捷方式,以及OpenCV中用于图像处理的重要函数,如`addWeighted`、`copyTo`和`createTrackbar`等。`addWeighted`用于加权合并两个数组,`copyTo`用于复制和转换矩阵,`createTrackbar`则用于创建交互式的滑动条。此外,还提到了`destroyAllWindows()`、`destroyWindow()`、`drawContours`等函数以及如何使用`imshow`显示图像。
摘要由CSDN通过智能技术生成

调试方式

1)注释:组合键“Ctrl+K+C”;
2)取消注释:组合键“Ctrl+K+U”

函数

addWeighted
原型: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
第二个参数,alpha,表示第一个数组的权重(0-1.0)
第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数,beta,表示第二个数组的权重值(0-1.0)。
第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
第六个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解(通常设置为0)。
第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。
如果用数学公式来表达,addWeighted函数计算如下两个数组(src1和src2)的加权和,得到结果输出给第四个参数。即addWeighted函数的作用可以被表示为为如下的矩阵表达式为:
dst = src1[I]*alpha+ src2[I]*beta + gamma;
copyTo
原型:void copyTo( OutputArray m, InputArray mask ) const;
createTrackbar
C++: int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0,void* userdata=0);
创建一个具有特定名称和范围的轨迹条(Trackbar,或者说是滑块范围控制工具),指定一个和轨迹条位置同步的变量。而且要指定回调函数onChange(第五个参数),在轨迹条位置改变的时候来调用这个回调函数。并且我们知道,创建的轨迹条显示在指定的winname(第二个参数)所代表的窗口上。
第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表我们创建的轨迹条。
第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名。
第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。
第四个参数,int类型的count,表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
第五个参数,TrackbarCallback类型的onChange,首先注意他有默认值0。这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面的第六个参数)。如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。
第六个参数,void*类型的userdata,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。

destroyAllWindows()
destroyWindow()
drawContours

 void drawContours( InputOutputArray image, InputArrayOfArrays contours,int contourIdx, const Scalar& color,int thickness=1, int lineType=8,InputArray hierarchy=noArray(),int maxLevel=INT_MAX, Point offset=Point() );

用来将轮廓绘制出来
image:表示目标图像;
contours:表示输入的轮廓组,每一组轮廓由点vector构成;
contourIdx:指明画第几个轮廓,如果该参数为负值,则画全部轮廓;
color:为轮廓的颜色;
thickness:为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部;
lineType:为线型;
第七个参数为轮廓结构信息
第八个参数为maxLevel
empty
inline bool Mat::empty() const { return data == 0 || total() == 0; }
判断当前的mat对象是否为空;

img = imread(FILE_PATH_TEST, 0);//Read the gray image  

if(img.empty())
{
 cout << "Could not read input image file: " << inputImage << endl;
        return -1;
}

fclose

int fclose( FILE *fp );

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。

fi

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值