在网上找了下,发现是坐标格式问题修改后代码如下
#include <stdio.h>
#include <stdlib.h>
#include "opencv/highgui.h"int XFuntion(   //直线方程
int x,
int y,
int xStart,
int yStart,
int xEnd,
int yEnd
)
{   int m;
m=cvFloor((y-yStart)*(xEnd-xStart)/(yEnd-yStart)+xStart);
return m;
}void EraseBackground(   //去掉线段某一边的背景
int xStart,                //起点
int yStart,
int xEnd,                  //终点
int yEnd,
int width,                 //图像的宽  
//int height,                //图像的高
cv::Mat_<unsigned char> &img,
int flag)                 //标志位 若flag=1,则左半部分置0;若flag=0,则右半部分置0
{
int xM,yM;
unsigned char yMchar; for(int i=yStart;i<=yEnd;i++)
{
xM=0;
yM=i;
xM=XFuntion(xM,yM,xStart,yStart,xEnd,yEnd);
printf("%d\,%d\n",xM,yM);
yMchar=yM;
if(flag)
{
for(int j=1;j<xM;j++)
img(cv::Point(j,yMchar))=0;
}
else
{
for(int j=xM+1;j<=width;j++)
img(cv::Point(j,yMchar))=0;
}
}
}
int main()
{
    static const char* path = "hejiong.jpg";
    cv::Mat_<unsigned char> img(cv::imread(path, CV_LOAD_IMAGE_GRAYSCALE));  
//cv::Mat_<unsigned char> outimg(img.rows,img.cols);
//IplImage* image=cvLoadImage("hejiong.jpg"); cv::line(img,cv::Point(150,0), cv::Point(150,350), 255, 1); EraseBackground(150,0,150,350,img.cols,img,1); cv::imwrite("minimal.bmp", img); cv::imshow("连线后", img);
    cv::waitKey();
    return 0;
}但是出现了新的问题,使用unsigned char格式的坐标值取不到255以后