VC6.0或VS2010对图片 *** 作

VC6.0或VS2010对图片 *** 作,第1张

你终于肯放弃vc6了?其实余液神有gdi+ sdk的话vc6也可以……

既然提到vs2010了,那么我说一下gdi+的做法。

1、从文件创建一个Image对象(Image::FromFile

2、根据要保存的部分的大小(分辨率)创建一个Bitmap对象(直埋轿接用它构造函数即可

2、从Bitmap对象创建一个Graphics对象(Graphics::FromImage

3、调用Graphics对象上的DrawImage方法,

g->DrawImage(步骤1的Image对象指针, 0, 0, x, y, w, h, UnitPixel)

其中x、y是要截取的部分的左上角的坐标,w和h是要截取的部分的大小(也就是目标图像的分辨率,步骤2中创建的图像的分辨率

4、调用Graphics对象上的Flush方法确保数据都写入Bitmap对象了

5、调用步骤2创建的Bitmap对象上的Save方法保存文件,这个具体你可以上网搜,关于那些clsid啥的应该竖亏送什么参数

类似抠图把,给图像加上mask,完后把纯旁mask保存下来,仅供参考

#include <iostream> // for standard I/O

#include <string>   // for strings

#include <iomanip>  // for controlling float print precision 

#include <sstream>  // string to number conversion 

#include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur

#include <opencv2/core/core.hpp>        // Basic 做裂橡OpenCV structures (cv::Mat, Scalar)

#include <opencv2/highgui/highgui.hpp>  // OpenCV window I/O

using namespace std

using namespace cv

// images

Mat inputImg, showImg, segMask, segShowImg

// mask

Mat fgScribbleMask, bgScribbleMask

// user clicked mouse buttons flags

bool rButtonDown = false

bool lButtonDown = false

int scribbleRadius = 5

// mouse listener

static void onMouse( int event, int x, int y, int, void* )

{

    //cout << "On Mouse: (" << x << "," << y << ")" <<endl

    if (event == CV_EVENT_LBUTTONDOWN)

    {

        lButtonDown = true

    }

    else if (event == CV_EVENT_RBUTTONDOWN)

    {

        rButtonDown = true

    }

    else if (event == CV_EVENT_LBUTTONUP)

    {

        lButtonDown = false

    }

    else if (event == CV_EVENT_RBUTTONUP)

    {

        rButtonDown = false

    }

    else if (event == CV_EVENT_MOUSEMOVE)

    {

       源拿 if (rButtonDown)

        {

            // scribble the background

            circle(bgScribbleMask,Point(x,y),scribbleRadius, 0,-1)

            circle(showImg,Point(x,y),scribbleRadius, CV_RGB(0,0,255),-1)

        }

        else if (lButtonDown)

        {

            // scribble the foreground

            circle(fgScribbleMask,Point(x,y),scribbleRadius, 0,-1)

            circle(showImg,Point(x,y),scribbleRadius, CV_RGB(255,0,0),-1)

            //fgScribbleMask.at<char>(y,x)=(char)255

            // set variables using mask

            //showImg.setTo(redColorElement,fgScribbleMask)

            //showImg.at<Vec3b>(y,x)[0] = 0

            //showImg.at<Vec3b>(y,x)[1] = 0

            //showImg.at<Vec3b>(y,x)[2] = 255

        }

    }

    imshow("Scribble Image", showImg)

    imshow("fg mask", fgScribbleMask)

    imshow("bg mask", bgScribbleMask)

}

// clear everything before closing

void destroyAll()

{

    // destroy all windows

    destroyWindow("Input Image")

    destroyWindow("Scribble Image")

    destroyWindow("bg mask")

    destroyWindow("fg mask")

    destroyWindow("Segmentation Mask")

    destroyWindow("Segmentation Image")

    // clear all data

    fgScribbleMask.release()

    bgScribbleMask.release()

    inputImg.release()

    showImg.release()

    segMask.release()

    segShowImg.release()

}

// init all images/vars

int init(char * imgFileName)

{

    // Read the file

    inputImg = imread(imgFileName, CV_LOAD_IMAGE_COLOR)   

    showImg = inputImg.clone()

    segShowImg = inputImg.clone()

    // Check for invalid input

    if(!inputImg.data )                              

    {

        cout <<  "Could not open or find the image: " << imgFileName << std::endl 

        return -1

    }

    // this is the mask to keep the user scribbles

    fgScribbleMask.create(2,inputImg.size,CV_8UC1)

    fgScribbleMask = 255

    bgScribbleMask.create(2,inputImg.size,CV_8UC1)

    bgScribbleMask = 255

    segMask.create(2,inputImg.size,CV_8UC1)

    segMask = 0

    // Create a window for display.

    namedWindow( "Input Image", CV_WINDOW_AUTOSIZE )

    namedWindow( "Scribble Image", CV_WINDOW_AUTOSIZE)

    namedWindow( "fg mask", CV_WINDOW_AUTOSIZE )

    namedWindow( "bg mask", CV_WINDOW_AUTOSIZE )

    // Show our image inside it.

    imshow( "Input Image", inputImg )                        

    imshow( "Scribble Image", showImg )  

    imshow("fg mask", fgScribbleMask)

    imshow("bg mask", bgScribbleMask)

    moveWindow("Scribble Image", 1,1)

    moveWindow("Input Image", inputImg.cols + 50,1)

    moveWindow("Bin Per Pixel", 2*(inputImg.cols + 50),1)

    moveWindow("Edges", 2*(inputImg.cols + 55),1)

    // set the callback on mouse

    setMouseCallback("Scribble Image", onMouse, 0)

    return 0

}

int main(int argc, char *argv[])

{

    String image_name,numBinsStr,bhaSlopeStr

    cout<<"input Parameters:"<<endl

    cout<<"image name: "

    cin>>image_name

    // get img name parameter

    char * imgFileName = (char *)image_name.c_str()

    if (init(imgFileName)==-1)

    {

        cout <<  "Could not initialize" << endl 

        return -1

    }

    // Wait for a keystroke in the window

    for ()

    {

        char key = waitKey(0)                          

        switch (key)

        {

        case 'q':

            cout << "goodbye" << endl

            destroyAll()

            return 0

        case '-':

            //缩小画笔直径

            if (scribbleRadius > 2)

                scribbleRadius --

            cout << "current radius is " << scribbleRadius << endl

            break

        case '+':

            if (scribbleRadius < 100)

                scribbleRadius ++

            cout << "current radius is " << scribbleRadius << endl

            break

        case 's':

            {

                // this is where we store the results

                segMask = 0

                inputImg.copyTo(segShowImg)

                //inputImg.copyTo(showImg)

                imwrite("bg.bmp",bgScribbleMask)

                break

            }

        case 'r':

            {

                cout << "resetting" << endl

                destroyAll()

                if (init(imgFileName)==-1)

                {

                    cout <<  "could not initialize" << std::endl 

                    return -1

                }

                break

            }

        }

    }

    return 0

}

你好:的原因有很多,一般有以下几个方面:

1. 程序设计不当:程序设计不合理,存在程序功能设计上的缺陷,导致在一些特定情况下出现意外退出的情况。

2. 编程问题:由于程序编卖笑写的不当,存在语法错误或逻辑错误袭纳,导致在使用过程中出现意外退出的情况。

3. 软件问题:由于软件本身存在漏洞,或者软件不兼容系统和硬件,也会导致程序意外退出的情况。

4. 硬件原因:由于系统中硬件资源不足,系统出现崩溃,也会导致程序意外退出的情况。谢谢提拍配没问


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12560586.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存